首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vim中为非tex文件映射<C-j>,并安装Latex-Suite

在Vim中为非tex文件映射<C-j>,并安装Latex-Suite
EN

Stack Overflow用户
提问于 2021-07-24 04:43:28
回答 1查看 36关注 0票数 0

我找到了一些较旧的帖子here,它们讨论了在vim中映射<C-j>快捷方式的困难,例如

代码语言:javascript
复制
map <C-j> <C-w>j

由于latex-suite使用<C-j>在文本中向前跳转。我遇到了类似的情况,但我希望在编辑tex文件时保留latex-suite的常规快捷方式,并且只在编辑非tex文件时使用新的映射。我有点困惑为什么这不是默认行为-latex-suite的<C-j>快捷键在:map输出中显示为一个快捷键,即使我没有加载tex文件,并且其他快捷键(比如`a映射到\alpha)不起作用。我是否正确理解了,与大多数latex-suite的快捷方式不同,latex-suite中的这个<C-j>快捷方式会因为某些原因而不受文件类型的影响而加载?如果是这样的话,我如何使它只为tex文件加载,以便我可以将其他<C-j>映射用于非tex文件?

EN

回答 1

Stack Overflow用户

发布于 2021-07-24 17:37:12

对于该插件的维护者来说,唯一明智的解决方案是将其所有特定于文件类型的映射移动到ftplugin,这是它们所属的位置。他们目前的实现方式是好的实践(<Plug>)和坏的实践(全局文件类型特定的映射)的愚蠢组合,所有这些都在plugin/下的单个脚本中。这是非常糟糕的。

他们目前做的是:

代码语言:javascript
复制
" in plugin/imaps.vim

inoremap <silent> <Plug>IMAP_JumpForward    <C-\><C-N>:call IMAP_Jumpfunc('', 0)<CR>

if !hasmapto('<Plug>IMAP_JumpForward', 'i')
    imap <C-J> <Plug>IMAP_JumpForward
endif

  • 第一个映射没问题:插件作者应该尽可能多地使用虚拟:help <Plug>映射,以便允许用户轻松编写自己的映射。IMAP_JumpForward应该放在括号里,
  • 这个:help hasmapto()守卫是一个“全局插件”。因此,无论它做什么,都是针对每个缓冲区和窗口执行的,而不是显式地限定到缓冲区或窗口。<C-j>映射只有在…中才有意义在使用latex套件插件时,在tex文件上下文中使用
    • ,如果您实际使用的是imaps.vim插件elsewhere.

,则为

他们应该做的是:

代码语言:javascript
复制
" in plugin/imaps.vim

inoremap <silent> <Plug>(IMAP_JumpForward)    <C-\><C-N>:call IMAP_Jumpfunc('', 0)<CR>

" in ftplugin/**/<somefile>.vim

imap <buffer> <C-J> <Plug>(IMAP_JumpForward)

坦率地说,这件事的设计方式应该引起各种危险信号。我根本不做(la)tex,但https://github.com/lervag/vimtex似乎做得更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68504867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档