使用Vim时的脚本快捷方式
我刚刚了解到,我可以使用 :%!/路径/到/脚本使用Vim时的脚本快捷方式,vim,Vim,我刚刚了解到,我可以使用 :%!/路径/到/脚本 有没有办法设置filter1=/path/to/script,这样我只需要键入:%!过滤器1?您可以使用cabbrev创建如下命令行缩写: :cabbrev filter1 /path/to/script 如果键入filter1,后跟一个空格,它将扩展到/path/to/script。 你也可以把%放进去编码为缩写 显然,如果您经常使用此筛选器,则可能更容易为此创建键绑定: map ,f :%!/path/to/script<cr>
有没有办法设置filter1=/path/to/script,这样我只需要键入
:%!过滤器1
?您可以使用cabbrev
创建如下命令行缩写:
:cabbrev filter1 /path/to/script
如果键入filter1
,后跟一个空格,它将扩展到/path/to/script
。
你也可以把%放进去如果仅在此组合中使用,请将>编码为缩写
显然,如果您经常使用此筛选器,则可能更容易为此创建键绑定:
map ,f :%!/path/to/script<cr>
map,f:%/路径/到/脚本
这将映射,f
,以执行过滤器 您还可以将脚本放在$PATH
中的某个位置
vim(和其他程序)现在可以在命令行上使用scriptname
命令
:!scriptname<CR>
但是我们最终得到了两个配置文件:~/.profile
和~/.bashrc
。第一个中定义的别名在所有终端会话中可用,但在Vim中不可用;第二个中定义的别名在Vim中可用,但在常规终端会话中不可见
一种解决方案是在上面的选项中添加-l
标志,使MacVim运行交互式登录shell(从而利用~/.profile
中的内容)
另一个解决方案是在~/.bashrc
中使用source~/.profile
,就像我几年前做的那样
但是,正如@ZyX在他的评论中正确地指出的那样,整个过程可能会变得混乱,并且可能存在性能问题
在我看来,在Mac OS X上,最好的做法可能是将shellcmdflag
保留为默认值,将日常终端使用中所需的任何别名/变量/函数放入~/.profile
(而不是~/.bashrc
,因为默认情况下它不会执行)只需将自定义脚本放入$PATH
哇,你们太棒了!(维姆也是如此)。谢谢你的快速回复。不幸的是,有一些限制::cabbrev
可以像广告宣传的那样工作,但Vim不记得缩写。一旦我关闭macvim,甚至在新窗口中,它就会消失。不,我更需要这个。别名技巧不太管用(Mountain lion,还没有在linux下尝试过)。是的,我已经找到了。我收到一条“未找到命令”消息。看来地图是我最好的选择。不过,我认为这对选择来说并不太好。也许我应该把脚本放在$PATH中。再次感谢。只想补充一点,我也在终端中尝试了上述建议。将脚本放在$PATH
中一定能奏效。关于:cabbrev
不被记住;自定义命令、自定义映射、自定义设置等等都应该添加到必须自己创建的~/.vimrc
文件中。通常,您只需删除:
,:nnoremap something
成为nnoremap something
。此外,实际上它有点复杂,但一般来说,别名和路径属于您的~/.profile
,而不是属于您的~/.bashrc
。您可以在Vim中执行:echo$PATH
,查看它真正看到的内容。@ZyX,您当然是对的。但在Mac OS X中,新shell(如“new Terminal.app window”中)总是启动新的登录shell。如果您在.profile
或.bash\u profile
之外的任何地方定义别名,则除非您启动非登录交互式shell,否则您将永远无法使用它们。如果不明确执行bash-i
,.bashrc
将永远不会执行。因此,不,别名“不属于.bashrc
,从不属于.profile
”,我最初建议在.profile
中添加别名。我错了,但不是因为“别名属于.bashrc
,从不属于.profile
”。为了更持久的解决方案,在.vimrc中添加了“cabbrev filter1/path/to/script”。谢谢你,利克斯。第一个是cnoreabrev
。第二个是nnoremap
(注意前面的n
:在视觉或操作员挂起模式下不需要此映射,在第一种情况下它甚至根本不起作用)。谢谢,ZyX。一定要使用那些“诺尔”版本。
:set shellcmdflag=-ic