zsh全局别名管道到文件并在vim中打开文件卡住了

时间:2018-02-21 12:43:01

标签: vim zsh

我希望有一个全局别名,可以重定向输出并在vim中打开。它曾经像这样工作

alias -g V=' > /tmp/vim-tmp && vim /tmp/vim-tmp '

但是停止工作(例如:ls V),终端卡住了,只有CTRL-c我得到了提示,但文件/tmp/vim-tmp没有被写入。

以较少的作品开场alias -g V=' > /tmp/vim-tmp && less /tmp/vim-tmp '但这不是我想要的。

直接从终端工作ls > /tmp/vim-tmp && vim /tmp/vim-tmp。我的所有其他全局别名都有效,如果我alias -g V=' > /tmp/vim-tmp',则文件/tmp/vim-tmp被正确写入。我正在使用nvim但是使用常规vim获得相同的结果。

如何正确设置这样的全局别名?

我正在使用zsh 5.3.1(与zsh 5.2相同的效果),neovim v0.2.2(与vim 8.0相同的效果),macos SIERRA 10.12.2和iterm2 3.0.4(与终端2.7.1相同的效果) )

3 个答案:

答案 0 :(得分:2)

您可以直接使用标准输入编写全局别名:

alias -g V="| vim -"

答案 1 :(得分:1)

我宁愿编写一个全局函数(例如.zshrc

function my_funct() {
  $1 > /tmp/vim-tmp && vim /tmp/vim-tmp;
}

然后用:

来调用它
$ my_funct ls

您可以向my_funct添加更多测试,以检查$1是否存在

答案 2 :(得分:1)

我发现了。我正在使用fasd插件(并且非常喜欢它),但这是让我搞砸的人。 Fasd使用函数_fasd_preexec注册到zsh preexec hook,这就是命令被我的全局别名卡住的地方。 I've added a hack of my own to their source code to stop the problem. I've opened and issue with them.