vim - 两全其美 : arrow keys for cursor movement or flipping through buffers

标签 vim

我真的很喜欢这个 vim 技巧,它使用向左和向右箭头在缓冲区之间切换:

"left/right arrows to switch buffers in normal mode
map <right> :bn<cr>
map <left> :bp<cr>

(把它放在 ~/.vimrc 中)

但有时我在滚动文件时正在咀嚼三明治或其他东西,我真的希望箭头键能够正常工作。 我认为只有当实际上打开了多个缓冲区时,箭头键才具有上述缓冲区翻转功能才最有意义。

有没有一种方法可以扩展上述内容来实现这一点?

最佳答案

我宁愿有一个完全不同的映射,因为:

  • 游标真的很有用,因为你有一个隐藏的缓冲区而没有它们会让你很烦
  • 一些插件使用<left><right>因为它们比 l 更容易混淆和 h ;这些插件可能会破坏此类映射

无论如何,你可以试试这个:

nnoremap <expr> <right> (len(filter(range(0, bufnr('$')), 'buflisted(v:val)')) > 1 ? ":bn\<cr>" : "\<right>")
nnoremap <expr> <left> (len(filter(range(0, bufnr('$')), 'buflisted(v:val)')) > 1 ? ":bp\<cr>" : "\<left>")

要查看有关上述部分的文档:

:h :map-<expr>
:h len()
:h filter()
:h range()
:h bufnr()
:h buflisted()

关于vim - 两全其美 : arrow keys for cursor movement or flipping through buffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962125/

相关文章:

javascript - Vim 一直在 html 文件中搞乱我的 javascript 语法

c++ - Vim 将长字符串分成几个

vim - vim中如何删除同一垂直方向上的单词

vim - syntastic - 显示 jslint 和 jshint 错误

vim - 在多行选择之前粘贴

macos - 粘贴到 vi 时丢失文本

git - 仅在选项卡中获取 git diff 输出

Vim 跳转到下一个匹配而不影响搜索模式

vim - 如何在VIM中进行这种窗口移动?

vim 命令行编辑