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

打开tex文件时的vim条件键映射,vim,keymapping,Vim,Keymapping,我正在尝试创建一个keymap,当.tex可用时调用latexmk(如果.tex是当前打开和活动的缓冲区会更好) 我试过: :nnoremap <Leader>lw :if filereadable('*.tex')<cr>up!<cr>:!latexmk -pdf<cr>endif<cr> 请帮忙 (如前所述,如果能在.tex是当前打开且处于活动状态的缓冲区时执行此操作,那就太好了。) 注:这个问题及其变体在这里已经被问了好几次了,

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

我试过:

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

(如前所述,如果能在.tex是当前打开且处于活动状态的缓冲区时执行此操作,那就太好了。)


注:这个问题及其变体在这里已经被问了好几次了,因此,很抱歉重复。我没能用这些解决我的问题。

我觉得这可以用一个简单的方法来完成

仅当文件为tex文件时,autocmd才会加载映射

autocmd FileType tex nnoremap <leader>lw :up! \| !latexmk -pdf<CR>
autocmd文件类型tex nnoremap lw:up!\\124;!latexmk-pdf

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

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

您需要做三件事:

  • 修复映射以正确运行命令
  • 使用
    nnoremap
    选项创建本地到特定缓冲区的映射
  • 仅加载特定文件类型的映射
首先,通过使用
并删除
,将命令作为单个ex命令执行,来修复映射。我们还删除了filereadable部分,因为我们刚刚编写了文件

nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>
另一种方法是创建一个文件类型插件。(有关更多详细信息,请参见
:h ftplugin

一个简单的例子是创建一个名为,
~/.vim/ftplugin/text.vim的文件,并将映射放在其中,如下所示:

nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>
nnoremap:up!!latexmk-pdf

我个人更倾向于ftplugin方法,但是在
.vimrc
文件中有一个万事俱备的工具是很好的。

我对nnoremap没有特别的偏好,所以autocmd解决方案就足够了。但这是什么记号?你能解释一下吗?@Rudra管道
|
是vim中的命令分隔符。它前面的斜杠正在转义,在运行该命令之前,它将被逐字处理。此外,autocmd中还有一个nnoremap。
autocmd FileType tex nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>
nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>