在vim中将一个键映射到多个命令

39

我理解为了在同一行执行多条命令,例如保存并执行pdflatex,可以按照以下方式操作。

:w | !pdflatex %:t

请注意,%:t 可以获取当前文件名(不包括路径)。此代码在Vim中可以正常工作。现在,如果我想将上面的整个内容映射到例如ctrl+shift+F6,我希望能够执行以下操作。
:nnoremap <C-S-F6> :w | !pdflatex %:t<CR>

但���这并不起作用,会给我以下错误。
:!pdflatex paper.tex<CR>
/bin/bash: -c: line 0: syntax error near unexpected token `newline'
/bin/bash: -c: line 0: `pdflatex paper.tex<CR>'

这是否意味着我无法将ctrl+shift+F6映射到所需的功能,保存并执行pdflatex?我该怎么办才能解决这个问题?

1个回答

68
假设 <C-S-F6> 真的有效(在CLI Vim中可能不会),你必须转义竖线或者使用<bar>代替:
:nnoremap <C-S-F6> :up \| !pdflatex %:t<CR>
:nnoremap <C-S-F6> :up <bar> !pdflatex %:t<CR>

请参考:help map_bar


哇,你怎么知道的?非常感谢!<C-S-F6>确实有效。我不知道CLI Vim是什么。 - Ray
4
命令行界面的 Vim,与图形用户界面的 Vim 相对应。我之所以知道这一点,是因为我遇到了相同的问题,在 Vim 的文档中找到了答案,并没有忘记它。 - romainl
我不知道我必须转义那个条;非常感谢,这节省了我几个小时的研究。 - betoharres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接