Как я могу интуитивно перемещать курсор в VIM? (не по линии) - PullRequest
14 голосов
/ 15 марта 2012

если некоторые строки слишком длинные, он будет вынужден быть переведен на новую строку.

например, обычно длинная строка будет выглядеть так

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» в «это длинное», это более интуитивный процесс для меня. как настроить мой vim на работу, подобную этой?

Ответы [ 4 ]

26 голосов
/ 15 марта 2012

В Vim команды gj и gk перемещаются по строке на экране , а не по строке в файле . Звучит так, как будто это соответствует вашему описанию.

Вы можете изменить ваши ключи следующим образом:

:map j gj
:map k gk
5 голосов
/ 15 марта 2012

Нет, если некоторые строки слишком длинные и у вас есть set wrap , они будут отображаться, так сказать, на "двух линиях", но между ними не будет символа новой строки.Если вы выключите wrap с , установите nowrap , вы увидите эффект.

Обычно k и j перемещают вас вверх и вниз.Если вы хотите перемещаться по заштрихованным линиям, используйте gk или gj, или, как вам нравится, сопоставьте его, например, с клавишами курсора.

nmap <up> gk
nmap <down> gj
2 голосов
/ 19 июня 2015

Возможно перемещение в 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 великолепен!)

Грег Руо

0 голосов
/ 10 января 2017

Этот ответ получен из ответа @ mario-rossi (Кудо ему), с небольшим посредничеством.

Я использую обычные клавиши со стрелками ВВЕРХ и ВНИЗ, а не 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...