我刚刚了解到我可以使用在我的vim文本窗口上运行perl脚本
:%!/路径/到/脚本
有没有办法set filter1 = /path/to/script
所以我只需要输入:%!filter1
?
答案 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
中。