2

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

4

2 回答 2

5

您可以使用cabbrev这样创建命令行缩写:

:cabbrev filter1 /path/to/script

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

显然,如果您经常使用此过滤器,则为此创建键绑定可能会更容易:

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

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

于 2013-01-15T10:14:54.480 回答
2

您还可以将脚本放在$PATH.

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

:!scriptname<CR>

显然,如果您经常使用该命令,您应该在~/.vimrc.

编辑

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

但是 MacVim 默认不使用登录 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.

于 2013-01-15T10:21:47.287 回答