我已经启用校正(我不会把它自动更正在zsh中通过启用特别是因为这个问题)setopt correct我.zshrc。
现在,当我输入dtae终端时,我得到:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望 zsh 记住我的决定。所以下次我输入时dtae它应该自动更正为date[1]。但是,这并没有发生,zsh 再次询问我该怎么做:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
Run Code Online (Sandbox Code Playgroud)
[1] 当然,除非当时存在实际的dtae命令或别名。
更新:
我设法修改了 zsh 源代码(文件utils.c,函数spckword)以创建一个自定义文件,其中包含通过调用 zsh 的“正确”功能自动创建的别名:
原来的:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
Run Code Online (Sandbox Code Playgroud)
修改的:
if (x == …Run Code Online (Sandbox Code Playgroud) 我知道有些人有一些启动脚本,有些人个性化了提示。一位开发人员为他经常访问的长路径和他运行的频繁命令使用短别名。
您对 UNIX 配置文件进行了哪些有效的自定义以提高生产力和易用性?
我想为 grep 创建一个添加行号的 bash 别名:
alias grep='grep -n'
Run Code Online (Sandbox Code Playgroud)
但是,当然,这也会向管道添加行号。大多数时候(并且没有任何例外)我不希望管道中的行号(至少在内部,如果它是最后一个可能没问题),而且我真的不想添加一个 sed/awk/cut管道只是为了把它们取出来。
也许我的要求可以简化为“如果 grep 是行上唯一的命令,则仅添加行号”。如果没有特别丑陋的别名,有没有办法做到这一点?
我遇到了一个问题,我不知道如何解决。
在我系统的某个地方,我定义了一个别名:
alias subl=\''/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl'\'
我不确定这是在哪个文件中,我想更改(或实际删除)它。
我可以在我的 .zshrc 中取消别名,但这不是一个优雅的解决方案。
当我运行时,alias | grep subl它会显示别名。有没有办法让它也回显定义别名的文件的路径?
谢谢
ll是许多 Linux 发行版中的常见别名。
我怎么知道它的别名是什么?
我试过检查我的.bashrc,但我不知道什么ll是等价的。
我正在使用 tcsh。bash 和 zsh 以及其他建议在这里无济于事。
我有几个别名与另一个命令的名称相同,所以如果我取消了它的别名,现在输入相同的东西会做不同的事情。
大多数时候我想要别名命令,这就是我拥有它们的原因。但是,有时我想要无别名的命令。
在没有实际取消别名和重新定义命令的情况下,是否有一种简单的方法可以告诉 tcsh 使用取消别名的命令?
例如,vi 是 vim 的别名,但有时我只想使用 vi。cd 别名用于更改我的窗口标题,但有时我想不理会它。
显然我可以输入 /usr/bin/vi 但由于 cd 是一个 shell 内置命令,所以没有等效的命令。有没有通用的解决方案?
假设您有一个 alias go,但希望它在不同的目录中做不同的事情?
在一个目录中它应该运行cmd1,但在另一个目录中它应该运行cmd2
顺便说一句,我已经有一个用于切换到上述目录的别名,那么是否可以将go别名分配附加到foo别名?
alias "foo=cd /path/to/foo"
Run Code Online (Sandbox Code Playgroud)
在 OSX 上使用 bash(?)。
每天大约 5 次,当我的意思是“cd”时,我输入“vi”,最后在 vi 中打开一个目录。这让我疯了。似乎应该有一种方法可以检测我何时输入“vi + directory”并自动将其更改为“cd + directory”。想法?
来自 bash 手册
有关别名的定义和使用的规则有些令人困惑。在执行该行上的任何命令之前,Bash 总是至少读取一行完整的输入。别名在读取命令时展开,而不是在执行时展开。因此,与另一个命令出现在同一行上的别名定义在读取下一行输入之前不会生效。该行别名定义后面的命令不受新别名的影响。执行函数时,此行为也是一个问题。 别名在读取函数定义时展开,而不是在执行函数时展开 函数中定义的执行,因为函数定义本身就是一个复合命令。作为结果, 函数中定义的别名在执行该函数之前不可用。为安全起见,始终将别名定义放在单独的行上,并且不要在复合命令中使用别名。
“在读取函数定义时扩展别名,而不是在执行函数时扩展别名”和“函数中定义的别名在执行该函数之后才可用”这两个句子似乎相互矛盾。
你能分别解释一下它们的意思吗?
例如,我在~/.bashrc文件(或等价物)中看到的一个常见别名是
alias rm='rm -i'
Run Code Online (Sandbox Code Playgroud)
但是,我看到人们建议不要这样做,因为
rm,您无意中删除了一些重要的内容。[1]y或执行,这与整个目的背道而驰。yesrm还有其他理由不建议这样做吗?可能有些程序只是简单地调用rm而不是\rm,并且对它进行别名可能会给他们带来问题?
我rm仅将其用作示例,但我也看到过类似别名cp或被mv别名覆盖的其他命令。就个人而言,我正在慢慢训练自己使用这样的别名来代替rm -i:
alias trash=`mv -v -t $HOME/.Trash`
Run Code Online (Sandbox Code Playgroud)