我如何直观地在vim中移动光标?(不是按行)

时间:2012-03-15 04:23:58

标签: vim

如果某些行太长,则会强制换行。

例如,通常一条长线看起来像这样

1 first line
2 this is the long second line of the file
3 third line.

但是,如果vim的窗口太窄,它将看起来像这样

1 first line
2 this is the long
  second line of the file
3 third line

问题来自于此。

让我们假设vim光标位于'第三行'的't'之前。如果我输入“k”,光标将移动到“文件的第二行”中的“s”之前。之后,如果我再次输入'k',光标将在'first line'中移动到'f'!而不是't'在'这是长'中。我想要的是光标在'这是长'中移动到't',这对我来说是更直观的过程。如何将我的vim设置为这样的工作?

4 个答案:

答案 0 :(得分:26)

在Vim中,gjgk命令在屏幕上逐行移动,而不是在文件中按行移动。这听起来可能与您的描述相符。

您可以像这样修改您的密钥:

:map j gj
:map k gk

答案 1 :(得分:5)

不,如果某些行太长并且你有设置换行,它们将显示在“两行”上,可以这么说,但它们之间不会有换行符。如果您使用 set nowrap 关闭 wrap ,您将看到效果。

通常情况下,kj会让您上下移动。如果您想要使用gkgj导航包裹的行,或者像它一样,将其映射到例如光标键。

nmap <up> gk
nmap <down> gj

答案 2 :(得分:2)

自然方式移入vim是可能的。

我所做的是,我建议你修改(或创建)你的&#34;〜/ .vimrc&#34;并添加以下两行:

map <C-Up> g<Up>
map <C-Down> g<Down>

这会将您的控制和控制向下映射到移动命令(这与控制权和控制权一致,以便在长线周围移动)

如果添加其他两行,则可以使用相同的命令在insertmode中移动:

imap <C-Up> <C-[> g<Up> i
imap <C-Down> <C-[> g<Down> i

(VIM很棒!)

Greg Ruo

答案 3 :(得分:0)

这个答案来自@mario-rossi 's answer(Kudo对他),有轻微的中间化。

我使用正常的向上和向下箭头键,而不是CTRL +向上和CTRL +向下。不知何故,我需要在INSERT模式映射中删除一个多余的空间,以避免一个接一个的行为。

将以下内容放入~/.vimrc

" When a long line is wrapped, the "gk" and "gj" allow you to move up and down
" a visual line, while normal "k" and "j" move a physical line.
" The following settings map "gk" and "gj" to cursor <up> and <down>.
map <up> gk
map <down> gj
" And the following lines enables same <up> and <down> behavior in INSERT mode
imap <up> <C-[> <up>i
imap <down> <C-[> <down>i