1

我正在尝试制作一个在 .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 是当前打开且活动的缓冲区时可以做到这一点,那就太好了。)

注意:这个问题和它的变体已经在这里被问过好几次了,例如这个这个,因此很抱歉重复。我没能解决我的问题。

4

2 回答 2

1

我觉得这可以用autocmd来完成。

autocmd 仅在文件是 tex 文件时才加载映射。

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>' : ''
于 2013-06-18T23:52:32.180 回答
1

你需要做3件事:

  • 修复您的映射以正确运行命令
  • 使用. <buffer>_nnoremap
  • 仅加载特定文件类型的映射。

首先通过使用<bar>和删除:'s & <cr>'s 将命令作为单个 ex 命令执行来修复映射。我们还删除了文件可读部分,因为我们刚刚编写了文件。

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

或者您可以使用 Fdinoff 建议的表达映射。

注意<buffer>映射上的选项。这使得映射仅可用于当前缓冲区而不是每个缓冲区。

现在我们需要确保这个映射只适用于tex文件类型。这可以通过你.vimrc喜欢的自动命令来完成:

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

另一种方法是创建一个文件类型插件。(查看:h ftplugin更多详情)

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

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

我个人更倾向于 ftplugin 方法,但在.vimrc文件中包含所有内容可能会很好。

于 2013-06-19T00:47:43.647 回答