如果某些行太长,则会强制换行。
例如,通常一条长线看起来像这样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设置为这样的工作?
答案 0 :(得分:26)
在Vim中,gj
和gk
命令在屏幕上逐行移动,而不是在文件中按行移动。这听起来可能与您的描述相符。
您可以像这样修改您的密钥:
:map j gj
:map k gk
答案 1 :(得分:5)
不,如果某些行太长并且你有设置换行,它们将显示在“两行”上,可以这么说,但它们之间不会有换行符。如果您使用 set nowrap 关闭 wrap ,您将看到效果。
通常情况下,k
和j
会让您上下移动。如果您想要使用gk
或gj
导航包裹的行,或者像它一样,将其映射到例如光标键。
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