zsh 有一个特性(auto_cd),只要输入目录名就会自动转到(cd)那个目录。我很好奇是否有办法将 zsh 配置为对文件名执行类似的操作,如果我只键入文件名,则使用 vim 自动打开文件?
问问题
653 次
2 回答
3
我能想到三种可能。首先是可以自动翻译的后缀别名
% *.ps
到
% screen -d -m okular *.ps
在你做之后
alias -s ps='screen -d -m okular'
. 但是您需要为每个文件后缀定义此别名。它也在大多数扩展之前被处理,所以如果
% *.p?
匹配相同的文件,因为*.ps
它不会打开任何东西。
其次是 command_not_found 处理程序:
function command_not_found_handler()
{
emulate -L zsh
for file in $@ ; do test -e $file && xdg-open $file:A ; done
}
. 但这不适用于绝对或相对路径,仅适用于不包含正斜杠的内容。
第三是一个 hack 覆盖接受行小部件:
function xdg-open()
{
emulate -L zsh
for arg in $@ ; do
command xdg-open $arg
endfor
}
function _-accept-line()
{
emulate -L zsh
FILE="${(z)BUFFER[1]}"
whence $FILE &>/dev/null || BUFFER="xdg-open $BUFFER"
zle .accept-line
}
zle -N accept-line _-accept-line
. 以上改变了历史(我可以展示如何避免这种情况)并且相当hackish。很好,它不会禁用后缀别名(whence '*.ps'
返回别名的值),我曾经认为它会。它确实禁用了autocd。我可以避免这种情况(就|| test -d $FILE
在whence
测试之后),但谁知道还有多少其他事情正在腐败。如果您对第一种和第二种解决方案感到满意,最好使用它们。
于 2012-10-26T20:52:37.330 回答
0
我猜你可以使用“ fasd_cd ”,它有一个别名 v,它使用 viminfo 文件来识别你至少打开过一次的文件。在我的环境中,它就像一个魅力。
Fast cd 还有其他你会喜欢的神奇的东西!不要忘记在 vim 上设置此别名以打开最后编辑的文件:
alias lvim="vim -c \"normal '0\""
于 2016-04-16T09:43:55.310 回答