我刚刚了解到我可以使用 :%!/path/to/script 在我的 vim 文本窗口上运行 perl 脚本有没有办法set filter1 = /path/to/script
让我只需要输入:%!filter1
?
2 回答
您可以使用cabbrev
这样创建命令行缩写:
:cabbrev filter1 /path/to/script
如果您的类型filter1
后跟一个空格,它将扩展为/path/to/script
. %!
如果你只在这个组合中使用它,你也可以将它放入缩写中。
显然,如果您经常使用此过滤器,则为此创建键绑定可能会更容易:
map ,f :%!/path/to/script<cr>
这将映射,f
到执行您的过滤器...
您还可以将脚本放在$PATH
.
该scriptname
命令现在可供 vim(和其他程序)在命令行上使用。
:!scriptname<CR>
显然,如果您经常使用该命令,您应该在~/.vimrc
.
编辑
在 Mac OS X 上,所有终端模拟器默认使用登录 shell。这意味着,对于日常终端使用,定义别名、更改您的$PATH
、设置 shell 变量或导出环境变量的正确位置实际上是~/.bash_login
or ~/.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
.