39

I understand that in order to execute multiple command in one line, for example save and execute pdflatex, I can do the following.

:w | !pdflatex %:t

Note that the %:t gives you the current file name (without path). This code works fine in Vim. Now, if I want to map the whole thing above to, say ctrl+shift+F6, I'd like to be able to do the following

:nnoremap <C-S-F6> :w | !pdflatex %:t<CR>

But this doesn't work, and gives me the following error.

:!pdflatex paper.tex<CR>
/bin/bash: -c: line 0: syntax error near unexpected token `newline'
/bin/bash: -c: line 0: `pdflatex paper.tex<CR>'

Does this mean that I can't map ctrl+shift+F6 to the desired function, save and execute pdflatex? What can I do to get around this?

1 Answer 1

70

Assuming <C-S-F6> actually works (it probably won't in CLI Vim), you must escape the bar or use <bar> instead:

:nnoremap <C-S-F6> :up \| !pdflatex %:t<CR>
:nnoremap <C-S-F6> :up <bar> !pdflatex %:t<CR>

See :help map_bar.

Sign up to request clarification or add additional context in comments.

3 Comments

OMG how did you know that!? Thank you very much! The <C-S-F6> does indeed work. I don't know what CLI Vim is.
Command Line Interface Vim, as opposed to GUI Vim. I know that because I encountered the same problem, found the answer in Vim's documentation and didn't forgot about it.
I didn't know that I had to escape that bar; thanks a lot, it saved me some hours of research

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.