Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Vim时的脚本快捷方式_Vim - Fatal编程技术网

使用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