我选择使用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
结合使用。我的问题是通过尝试补充这些映射来实现的,这样选择模式也可以按照预期对包装文本起作用。
答案 0 :(得分:1)
对于选择模式,如果那是真的你的意思,这些映射就可以了:
vnoremap <S-Up> gk
vnoremap <S-Down> gj
imap <S-Up> <Esc>gh<S-Up>
imap <S-Down> <Esc><Right>gh<S-Down>
nmap <S-Up> gh<S-Up>
nmap <S-Down> gh<S-Down>
注意gh
命令(选择模式)而不是v
(可视模式)。
但请注意 - 这是我的一个假设 - Vim用户的普通民众避开选择模式,因为它与 Vim方式背道而驰。
可视模式功能更强大,因为除了替换文本之外,您还可以将其拉入寄存器,使其大写或小写,更改视觉选择的范围等。查看{{ 1}}。
答案 1 :(得分:0)
以下是我自己提出的建议:
将<Up>
和<Down>
移至上一个/下一个屏幕行。 (在插入模式下,<C-O>
切换到一个命令的正常模式。在正常模式下,gj和gk是'按屏幕行移动'命令。)
inoremap <Up> <C-O>gk
inoremap <Down> <C-O>gj
在插入模式下<S-Up>
和<S-Down>
相同,进入选择模式。 (在正常模式下,v进入可视模式.gj和gk也在可视模式下工作。在可视模式下,<C-G>
进入选择模式。)
inoremap <S-Up> <C-O>vgk<C-G>
inoremap <S-Down> <C-O>vgj<C-G>
在选择模式下<S-Up>
和<S-Down>
相同。 (在选择模式下,<C-O>
切换到一个命令的可视模式。)
snoremap <S-Up> <C-O>gk
snoremap <S-Down> <C-O>gj