【发布时间】:2013-09-07 22:05:09
【问题描述】:
我选择使用 gvim 作为我的主要文本编辑器,但仍然希望它的行为更像我习惯的其他可视化编辑器。一方面是当我启用换行 (set linebreak) 并在插入模式下使用箭头键 <Up> 和 <Down> 时,我想将光标移动到上一个/下一个 屏幕 行,不是逻辑行。这可以使用映射来实现:
inoremap <Up> <C-O>gk
inoremap <Down> <C-O>gj
...一切都很好。
除了,在选择模式下。在使用<S-Right> 时,<S-Left> 按预期工作,<S-Up> 和<S-Down> 仍然按照逻辑行移动。在http://vim.wikia.com 上,我发现了以下关于其他映射的建议:
noremap <S-Up> vgk
noremap <S-Down> vgj
inoremap <S-Up> <C-O>vgk
inoremap <S-Down> <C-O>vgj
后两种映射现在使我开始在插入模式下按<S-Down> 进行选择时,我可以从前一个位置选择一个到下一个屏幕行中的相同位置。但是当我已经有一个选择(已经处于选择模式)时,按<S-Down> 会向下移动一行但会丢失选择。
我希望实现这一点,需要为选择模式 (snoremap) 提供特定映射,但无法弄清楚如何做到这一点。
由于与 glts 讨论了选择模式是否无用,因此可能需要一些背景信息:选择模式似乎是 vim 试图提供类似于 MS Windows 上大多数其他可视化编辑器中的选择行为的东西, Mac OS,甚至 Linux,这反过来又受到IBM's CUA 的启发。由于它仅对随附的键盘映射 ^C、^X、^V 真正有用,因此它应与提供这些映射的mswin.vim 结合使用。我的问题是试图补充这些映射,以便选择模式也可以按预期工作于包装文本。
【问题讨论】:
-
理论上,这个问题属于超级用户。然而,关于 stackexchange 的大多数 vim 问题似乎都在 stackoverflow 上——这也是我把我的问题放在这里的原因。
-
在 Vim 中,选择模式称为 Visual 模式。 (Vim 确实有其他称为“选择模式”的东西,但您可以立即忘记它,因为它在实践中几乎没有用。)您可以使用
:xnoremap进行可视模式映射。 -
@glts 是否有任何理由使用 xnoremap 而不是 vnoremap?
-
@FDinoff 最不意外的原则?
:xnoremap专门用于可视模式,:vnoremap用于可视模式和选择模式,这几乎不合适。:h mapmode-x有潜在混淆的警告。 -
亲爱的@glts,我很确定我的意思是 Select 模式。 :-)
标签: vim selection word-wrap keymapping