2

zsh 有一个特性(auto_cd),只要输入目录名就会自动转到(cd)那个目录。我很好奇是否有办法将 zsh 配置为对文件名执行类似的操作,如果我只键入文件名,则使用 vim 自动打开文件?

4

2 回答 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 $FILEwhence测试之后),但谁知道还有多少其他事情正在腐败。如果您对第一种和第二种解决方案感到满意,最好使用它们。

于 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 回答