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