1

我选择使用 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 的 CUA的启发。由于它仅与随附的键盘映射 ^C、^X、^V 一起使用,因此它应与mswin.vim提供这些映射的键盘一起使用。我的问题是试图补充这些映射,以便选择模式也可以按预期工作于包装文本。

4

2 回答 2

1

对于 Select 模式,如果这确实是您的意思,那么这些映射将起作用:

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 用户的普通大众会避开 Select 模式,因为它与 Vim 的方式背道而驰。

可视化模式更强大,因为除了替换文本之外,您还可以将其拉入寄存器,将其设置为大写或小写,更改可视化选择的范围等。看看:h vim-modes

于 2013-09-08T01:37:11.840 回答
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
于 2013-09-08T14:02:19.263 回答