有没有办法设置某种别名,以便当我这样做时:
cd some/directory
vim .zshrc
是吗vim ~/.zshrc
?
答案1
答案比你想象的要简单得多,因为你问错了问题。
如果您真正的意思是“如何创建一个别名,允许我编辑我的别名,~/.zshrc
而不管我当前的工作目录如何?”那么答案很简单:
alias zshconfig="vim ~/.zshrc"
这个例子来自我自己~/.zshrc
,我经常使用它。
一个更好的选择,建议@mateen-ulhaq在下面的评论中,将是:
alias zshrc="vim ~/.zshrc"
换句话说,不要尝试为文件名或文件名的路径添加别名。这两种情况都是可能的,但可能会产生不可预测的副作用,从而在以后给您带来问题,例如@迈克尔-霍默已指出。
但既然您知道您的首选$EDITOR
是vim
,只需vim
为该特定文件的调用添加别名,您就可以开始工作了。 (将命令和参数的特定组合别名为不常见的字符串会更安全,这样在脱离上下文的情况下使用的可能性较小。)
然而,更一般地说,我的建议是您不应该担心优化两个字符序列~/
,而是应该习惯于键入它。继续……伸出你的左手小指,就像埃迪·范·海伦练习音阶一样。 (这将帮助您掌握vim
它,因为您可能应该习惯Esc
用小指敲击琴键!)
随着您的打字技巧的提高,您将获得该~/
序列的肌肉记忆,这将帮助您在引用主目录中的文件时可靠地键入该字符序列。你会故意快速地输入它,并且不会偶然地输入它。
依赖别名的缺点是,无论它们可以在您的家庭计算机上加速多少,当您需要ssh
进入客户端私有子网中的某个远程 Docker 容器并发现所有别名都消失时,它们都会减慢您的速度。
答案2
我真的不明白这一点,但是是的。您所做的事情比仅仅为命令提供不同的名称或一些默认参数更复杂,因此您需要一个函数,而不是别名。
function vim {
if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
set -- ~/.zshrc
fi
command vim "$@"
}
说明:当您运行 时vim
,它将调用该函数。在最后一行中,command vim …
调用外部命令,并将"$@"
传递给函数的参数传递给它。在两者之间,如果只有一个参数,并且该参数是确切的字符串.zshrc
,并且当前目录中没有调用文件.zshrc
,则命令行将替换为~/.zshrc
.如果这些条件不完全符合您的要求,请调整它们。
答案3
大概您正在使用 zsh 作为 shell,这确实具有“全局别名”功能这可以让你这样做:
% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc
那是,任何地方当该单词.zshrc
出现在命令行中时,它会被替换为~/.zshrc
,然后像往常一样进行波浪号扩展。它必须是自己的 shell“单词”,因此如果它只是较长名称的子字符串,则它不会被扩展。这适用于任何命令。
全局别名是一个臭名昭著的问题,因为它们确实会在任何地方默默地扩展,因此您可以rm .zshrc
在另一个目录中运行,它会瞄准您自己的点文件。它们还适用于 shell 内部函数,甚至是那些已经定义的函数。在这种情况下,似乎不太可能引起问题,但请注意它的可能性。您可以使用 来专门命名当前目录中的文件,或者使用或 用引号括起来来./.zshrc
获取文字字符串。\.zshrc