tex文件打开时的vim条件键映射

时间:2013-06-18 22:20:21

标签: vim keymapping

我正在尝试创建一个在.tex可用时调用latexmk的键映射(如果.tex是当前打开且活动的缓冲区会更好)

我试过了:

:nnoremap <Leader>lw :if filereadable('*.tex')<cr>up!<cr>:!latexmk -pdf<cr>endif<cr>

当试图让latexmk -pdf运行时,但不幸的是,它只是在窗口中提示那些行,并且什么都不做:

~
:if filereadable('*.tex')
:  up!
:  :call Tex_RunLaTeX()
:  endif
Press ENTER or type command to continue

请帮助。

(据说,如果.tex是当前打开且有效的缓冲区,可以这样做。)

注意:此问题及其变体已在此处多次询问,例如thisthis,因此很抱歉重复。我没有解决我的问题。

2 个答案:

答案 0 :(得分:1)

我觉得这可以通过autocmd完成。

当文件是tex文件时,autocmd仅加载映射。

autocmd FileType tex nnoremap <leader>lw :up! \| !latexmk -pdf<CR>

如果你想做这个filereadable('*。tex'),它只是检查目录中的文件是否是tex文件。您可以使用第一个链接中的expr映射。在表达式的else部分,我们只是放了一个空字符串,因此映射将不执行任何操作。

nnoremap <expr> <leader>lw filereadable('*.txt') ? ':up! \| !latexmk -pdf<CR>' : ''

答案 1 :(得分:1)

你需要做三件事:

  • 修复映射以正确运行命令
  • 使用<buffer>的{​​{1}}选项创建特定缓冲区的本地映射。
  • 仅为特定文件类型加载映射。

首先使用nnoremap执行命令作为单个ex命令并删除<bar>的&amp; :的。我们还删除了filereadable部分,因为我们只是编写了文件。

<cr>

或者您可以使用像FDinoff建议的表达式映射。

请注意映射上的nnoremap <buffer> :up!<bar>!latexmk -pdf<cr> 选项。这使得映射仅对当前缓冲区可用,而不是对每个缓冲区都可用。

现在我们需要确保此映射仅适用于<buffer>文件类型。这可以通过tex中的自动命令完成,如下所示:

.vimrc

另一种方法是通过创建文件类型插件。 (有关详细信息,请参阅autocmd FileType tex nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>

一个简单的例子就是创建一个名为:h ftplugin的文件,并将映射放在里面:

~/.vim/ftplugin/text.vim

我个人更倾向于使用ftplugin方法,但在nnoremap <buffer> :up!<bar>!latexmk -pdf<cr> 文件中包含所有内容可能会很好。