使用Vim时脚本的快捷方式

时间:2013-01-15 10:05:29

标签: vim

我刚刚了解到我可以使用在我的vim文本窗口上运行perl脚本     :%!/路径/到/脚本 有没有办法set filter1 = /path/to/script所以我只需要输入:%!filter1

2 个答案:

答案 0 :(得分:5)

您可以使用cabbrev创建如下命令行缩写:

:cabbrev filter1 /path/to/script

如果您输入filter1后跟空格,则会扩展为/path/to/script。 如果你只在这个组合中使用它,你也可以将%!放入缩写中。

显然,如果你经常使用这个过滤器,可能更容易为此创建一个键绑定:

map ,f :%!/path/to/script<cr>

这会将,f映射到执行过滤器...

答案 1 :(得分:2)

您也可以将脚本放在$PATH

中的某个位置

scriptname命令现在可供vim(和其他程序)用于命令行。

:!scriptname<CR>

显然,如果您经常使用该命令,则应在~/.vimrc中创建映射。

修改

在Mac OS X上,默认情况下,所有终端模拟器都使用登录shell。这意味着,对于日常终端使用,定义别名,更改$PATH,设置shell变量或导出环境变量的正确位置实际上是~/.bash_login~/.profile。在这种情况下,~/.bashrc完全没用。

但MacVim默认不使用登录shell。实际上,它甚至不使用交互式shell。直接后果是,默认情况下,MacVim能够看到环境变量(export FOO='bar'),但无法看到我们的别名(alias foo='bar')或shell变量(BAZ='foo'),它们设置在~/.bash_login~/.profile~/.bashrc

值得庆幸的是,我们只需要在Vim中更改一个选项,使其使用交互式shell,从而查看~/.bashrc中定义的别名:

:set shellcmdflag=-ic

但我们最终得到了两个配置文件:~/.profile~/.bashrc。第一个中定义的别名在所有终端会话中都可用,但在Vim中不可用,第二个中定义的别名在Vim中可用,但在常规终端会话中不可见。

一种解决方案是将-l标志添加到上面的选项中,以使MacVim运行交互式登录shell(从而利用我们在~/.profile中的内容)。

另一种解决方案是source ~/.profile中的~/.bashrc,正如我几年前所做的那样。

但是,正如@ZyX在他的评论中正确地提出的那样,整个事情可能变得混乱并且可能存在性能问题。

在我看来,Mac OS X上最好的行动方案可能就是将shellcmdflag保留为默认值,在日常终端中放置所需的别名/变量/函数~/.profile中的使用情况(不是~/.bashrc,因为默认情况下不会执行),只需将自定义脚本放在$PATH中。