繁体   English   中英

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

[英]Mapping Ctrl+[ and Ctrl+] to move between buffers in Vim

我正在尝试映射Ctrl + [Ctrl + ]以在缓冲区之间移动。

我在.vimrc有这个:

nnoremap <c-[> :bprevious<CR>
nnoremap <c-]> :bnext<CR>
nnoremap <Esc> :noh<CR>

Ctrl + ]有效。 Ctrl + [触发器:noh和我不知道为什么。

我想按Ctrl + ]Ctrl + [只需在缓冲区和Esc之间移动以触发:nho

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

因此,我想建议,例如,使用F2F3 ,而不是映射这些键

nnoremap <F2> :bprevious<CR>
nnoremap <F3> :bnext<CR>

@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>完成
  • 使用<cd>列出完成
  • 使用部分文件名。 例如: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使用制表符完成:find并将您的'path'设置为.,,**以获得基本较不模糊的查找器。

有关更多帮助请参阅:

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

插件?

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

结论

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM