将 .zshrc 更正为 ~/.zshrc

将 .zshrc 更正为 ~/.zshrc

有没有办法设置某种别名,以便当我这样做时:

cd some/directory
vim .zshrc

是吗vim ~/.zshrc

答案1

答案比你想象的要简单得多,因为你问错了问题。

如果您真正的意思是“如何创建一个别名,允许我编辑我的别名,~/.zshrc而不管我当前的工作目录如何?”那么答案很简单:

alias zshconfig="vim ~/.zshrc" 

这个例子来自我自己~/.zshrc,我经常使用它。

一个更好的选择,建议@mateen-ulhaq在下面的评论中,将是:

alias zshrc="vim ~/.zshrc" 

换句话说,不要尝试为文件名或文件名的路径添加别名。这两种情况都是可能的,但可能会产生不可预测的副作用,从而在以后给您带来问题,例如@迈克尔-霍默已指出。

但既然您知道您的首选$EDITORvim,只需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

相关内容