Ответ 1
В Vim команды gj
и gk
перемещаются по строке на экране, а не по строке в файле. Похоже, это похоже на ваше описание.
Вы можете изменить свои ключи следующим образом:
:map j gj
:map k gk
если некоторые строки слишком длинны, он будет принудительно изменен.
например, обычно длинная строка будет выглядеть как
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", курсор переместится в "f" в "первой строке"!, а не "t" в "это длинный". я хочу, чтобы курсор переместился в "t" в "это длинный", это более интуитивный процесс для меня. как можно настроить мой vim на работу так?
В Vim команды gj
и gk
перемещаются по строке на экране, а не по строке в файле. Похоже, это похоже на ваше описание.
Вы можете изменить свои ключи следующим образом:
:map j gj
:map k gk
Нет, если некоторые строки слишком длинны, и вы установите обертку, они будут отображаться на "двух строках", так сказать, но между ними не будет символа новой строки. Если вы отключите обертку с помощью set nowrap, вы увидите эффект.
Обычно k
и j
перемещают вас вверх и вниз. Если вы хотите перемещаться по обернутым линиям, используйте gk
или gj
, или, как некоторые из них, сопоставьте его, например, с клавишами курсора.
nmap <up> gk
nmap <down> gj
Возможно перемещение в vim естественным образом.
Что я сделал, и предлагаю вам изменить (или создать) ваш "~/.vimrc" и добавить эти две строки:
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 отлично!)
Грег Руо
Этот ответ получен из @mario-rossi answer (Kudo к нему) с небольшим знаменем.
Я использую обычные клавиши со стрелкой ВВЕРХ и ВНИЗ, а не CTRL + вверх и CTRL + вниз. И почему-то мне нужно удалить одно избыточное пространство в режиме отображения INSERT, чтобы избежать пошагового поведения.
Вставьте ~/.vimrc
в ~/.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