映射Ctrl + [和Ctrl +]在Vim中的缓冲区之间移动

时间:2017-07-14 14:40:31

标签: vim

我试图映射 Ctrl + [ Ctrl + ] 在缓冲区之间移动

我在SO_SNDLOWAT

中有这个
SO_SNDLOWAT

Ctrl + ] 有效。 Ctrl + [触发.vimrc,我不知道原因。

我想 Ctrl + ] Ctrl + [只需在缓冲区和之间移动Esc 触发nnoremap <c-[> :bprevious<CR> nnoremap <c-]> :bnext<CR> nnoremap <Esc> :noh<CR>

2 个答案:

答案 0 :(得分:4)

ctrl + ] ctrl + [ ESC 已经存在由vim使用。不建议映射vim已使用的密钥。 更多:help map-which-keys

因此,我想建议,例如,使用 F2 F3

,而不是映射这些键。
nnoremap <F2> :bprevious<CR>
nnoremap <F3> :bnext<CR>

答案 1 :(得分:3)

@dlmeetei和@Lucas Beier是对的。这些对于Vim来说是不好的钥匙。

映射安全密钥,例如功能键,引导线映射或未使用的映射。示例(与unimpaired.vim相同):

nnoremap [b :bprevious<c>r
nnoremap ]b :bnext<cr>
nnoremap ]B :blast<cr>
nnoremap [B :bfirst<cr>

如需更多帮助,请参阅:

:h map-which-keys
:h key-notation
:h :bfirst
:h :blast

我们可以做得更好!或循环缓冲区的问题

循环缓冲区很慢。我相信:bprevious:bnext仅适用于一系列狭隘的条件:

  • 使用2个以上的缓冲区后,这些命令会很有用(可能是由于<c-6> / <c-^>)。
  • 一旦达到某个缓冲区数阈值,使用这些命令循环的有用性就有了一定的上限。循环前进会更快吗?向后?它是否重要,因为它只需要太长时间?

您可以通过:bp命令直接跳转到缓冲区,而不是使用:bn:b循环。只需使用:b {partial_name}<tab>

看到:b

的力量
  • 使用<tab>完成
  • 使用<c-d>列出完成
  • 使用部分文件名。例如:b foo。适用于<tab>
  • 通配。例如:b foo*bar:b foo/**/bar
  • :b的拆分变体是:sb
  • 还接受缓冲区编号
  • 常见的映射:nnoremap <leader>b :ls<cr>:b<space>

如需更多帮助,请参阅:

:h :b
:h :ls
:h cmdline-completion
:h file-searching

我们能做得比:b更好吗?

完全跳过缓冲区管理并使用标记,cscope和/或GNU Global。这些将帮助您直接前往您想去的地方,而不仅仅是您最后离开光标的位置的正确缓冲区。

对于初学者标记我建议Gutentags:h tags

您还可以使用:find标签完成功能,并将'path'设置为.,,**,以获得基本不太模糊的查找器。

如需更多帮助,请参阅:

:h CTRL-]
:h tags
:h cscope
:h :find
:h 'path'

插件?

CtrlPfzf这样的模糊查找器允许进行常规文件导航。对于更具体的项目导航,您可以使用类似Projectionist.vim的内容。

结论

我建议慢慢学习更多缓冲区和常规导航命令。这些命令可以很好地为您提供帮助,并且无需借助缓冲循环就可以更快地导航。

就个人而言,我使用:b,标签,cscope / GNU Global和projectionist.vim的组合来满足我的大部分导航需求。我经常打开50多个缓冲区,无需使用缓冲区循环就可以访问我想要的文件。