Странности Vim в раскладке клавиш

Мне нравится вставлять пустые строки, не входя в режим вставки, и я использовал это сопоставление клавиш:

nomap go o <esc>

Это создает пустую строку, но приводит к странному поведению. У меня есть умный отступ и автоматический отступ. Новая строка следует за отступами, но не удаляет их, хотя при этом вручную автоматически удаляются лишние пробелы. Он также добавляет один пробел, где курсор каждый раз.

У кого-нибудь есть идеи, как объяснить такое поведение?


person ipwnponies    schedule 27.08.2009    source источник


Ответы (3)


Vim очень буквально подходит к тому, как вы пишете свои команды сопоставления — он фактически обрабатывает пространство в вашем сопоставлении, прежде чем он выполнит <ESC>. Другими словами, ваше сопоставление делает следующее:

nnoremap go o<SPACE><ESC>

Вы должны изменить его на:

nnoremap go o<ESC>

И убедитесь, что у вас нет лишних пробелов в отображении!

person too much php    schedule 28.08.2009
comment
О! Я смотрел на неправильную проблему! Я предположил, что это просто список сопоставлений клавиш, а не буквальный пользовательский ввод. Большое спасибо! - person ipwnponies; 28.08.2009

Я согласен с "слишком много php". Это соответствующий раздел из моего .vimrc

nnoremap <A-o> o<ESC>k
nnoremap <A-O> O<ESC>j

Я думаю, что это быстрее, так как вы возвращаете курсор на исходную строку (хотя и не на исходный символ).

person Mosh    schedule 28.08.2009
comment
Тогда попробуйте это: 'nnoremap ‹A-o› mto ‹ESC›`t' - person too much php; 28.08.2009

Как обычно, на vim wiki есть полезный совет: Быстрое добавление и удаление пустых строк. Хитрость заключается в том, чтобы set paste перед добавлением новой строки, а затем set nopaste. Кроме того, это установит отметку, чтобы запомнить положение курсора и вернуться туда, где вы были.

nnoremap go :set paste<CR>m`o<Esc>``:set nopaste<CR>
nnoremap gO :set paste<CR>m`O<Esc>``:set nopaste<CR>
person innaM    schedule 28.08.2009