我尝试在vim中做一个键Map,它(a)保存当前文件(B)执行一个git操作,使用shell(c)退出当前的vim编辑器。
我试过以下方法,但还是没弄明白。
方法1-在Vim命令行中
:w | !git commit -am "auto" | q
方法2-在vimrc中
map :W :w \| !git commit -am "auto"
个map :L :Wq
问题
问题是管道|
只能用于附加shell命令。如何执行'a Vim command' + 'a shell command' + 'a Vim command'
?如何在shell命令后使用管道发送vim命令?
7条答案
按热度按时间4ngedf3f1#
您需要分别执行这三个命令。这就是
<CR>
的作用:uinbv5nw2#
你试过vim-fugitive吗?
您可以使用该插件 git commit -am,然后添加您的git命令。
所以你可以这样写:
Gcommit -am "auto"
我简单测试了一下。我把这个放进了我的。vimrc:
然后键入
:call CommitAndQuit()
,它就会按照您的要求执行操作。djmepvbi3#
这感觉与我在这里结束了联系!
所以如果你想在一个命令中绑定它,你将不能使用
<cr>
,管道也不能工作。在这种情况下,正确的做法是使用一个函数,并从该命令调用该函数。
在这个例子中,我有一个shell脚本来grep一些日志文件中的错误,并将结果输出到.errors中,然后在quickfix中打开它。
lnxxn5zx4#
我在这里看到了3种情况:
添加vim命令
如果你想添加一个新的vim命令,这样输入
:W
就可以写入缓冲区,执行git commit并退出vim,你需要按照JonnyRaa的答案来做,也就是说,定义一个函数,然后定义一个执行该函数的命令:备注:
1.这些行可以放在~/.vimrc中,或者在点击
:
后直接执行以进入命令行模式。1.我使用了
silent
,以避免出现“按Enter或键入命令继续”提示。1.您可能希望使用
write
和quit
,而不是w
和q
,以获得更美观的代码(相反,如果您赶时间,可以将silent
缩短为sil
...)。添加键盘Map
如果您只希望能够按一个键来运行这些命令,则需要添加一个Map,将shell命令放在中间的技巧是使用
<CR>
来模拟按ENTER键:备注:
1.同样,这可以在~/.vimrc中执行,或者通过点击
:
并直接键入来执行。1.除了
silent
之外,您还可以在shell命令之后添加一个额外的<CR>
。直接执行
有时候,您希望重复运行一系列命令,但不值得将它们保存到vimrc中,因为它们是临时的,在将来也没有用。在本例中,我只执行该行,然后依靠向上箭头从历史中再次调出该行并执行它。在本例中,技巧是使用Ctrl-V在命令中间添加一个转义的LF字符,Ctrl-J:
备注:
1.命令中的
^@
是我按Ctrl-V、Ctrl-J时显示的内容。如果按Shift-6、Shift-2,它将不起作用。但是,如果我按Ctrl-Shift-2,它似乎确实起作用。1.您也可以将第一个竖线字符替换为LF,但不是必须这样做。
1.如果你好奇的话,Ctrl-J是LF,因为LF是ASCII 10,J是ABC的第10个字母。类似地,Ctrl-I是Tab,Ctrl-M是CR,而Ctrl-]是Escape,因为Escape是ASCII 27,如果你看ASCII table,你会发现
]
是ABC的第27个字母。whlutmcx5#
我用这个命令复制当前文件路径到系统剪贴板。
pobjuy326#
对我来说,原因很简单:
sbdsn5lh7#
您不能:
A '|'传递到shell,则不能使用它附加Vim命令。请参阅|12:条形|。