Как вырезать текст в режиме вставки (SELECT) в Vim без нежелательного поведения?

В настоящее время я использую это отображение клавиш в моем .vimrc файл для имитации сочетания клавиш Windows Cut. Вырезать, то есть скопировать и удалить выделенный текст.

vnoremap <C-X> "+x

Это сопоставление клавиш является частью mswin.vim скрипт, который поставляется с Vim, который я не использую, я использую только несколько сопоставлений клавиш из этого файла.

Когда я затем выбираю текст из Vim в режиме вставки и нажимаю CtrlX, текст копируется и удаляется, но с нежелательным побочным эффектом, когда курсор перемещается на несколько символов назад и выполняет обычное поведение Vim при нажатии CtrlX, который заключается в уменьшении числа прямо под курсором!

Например, если я хочу изменить следующий код, чтобы сократить второе вхождение слова Renderer я начну с этого:

Renderer.setClearColorHex(0x7DB6D5, 1.0);
Renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);

и в конечном итоге это:

Renderer.setClearColorHex(0x7DB6D5, 1.-1);  // <--- oh dear!
.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);

Что вызывает больше, чем несколько ошибок!

Есть ли способ избежать этого нежелательного поведения с помощью этой раскладки или есть другой, более безопасный способ вырезать текст в режиме вставки (SELECT)?

2 ответа

Решение

Это был конфликт с плагином Snipmate в файле snipmate\after\plugin\snipMate.vim,

Я закомментировал эти строки, и все в порядке.

" snor <bs> b<bs>
" snor <right> <esc>a
" snor <left> <esc>bi
" snor ' b<bs>'
" snor ` b<bs>`
" snor % b<bs>%
" snor U b<bs>U
" snor ^ b<bs>^
" snor \ b<bs>\
" snor <c-x> b<bs><c-x>

Вы действительно используете mswin.vim или нет? AFAIK, там многое сделано для того, чтобы можно было редактировать в режиме INSERT и все такое чудовище; если вы берете только один маленький фрагмент, нет гарантии, что он будет работать правильно.

Если вы используете совместимость с MSWIN, и это сопоставление уже mswin.vimзачем ты положил это в свой vimrc?

Если вы не используете совместимость с MSWIN, здесь есть много неправильных вещей:

  • "редактирование" текста не выполняется в режиме INSERT, вы должны вернуться в нормальный режим и выполнить там редактирование
  • в нормальном режиме, d является правильным эквивалентом Ctrl+X, поскольку он удаляет то, что вы хотите удалить, и помещает это в регистр по умолчанию, готовый для вставки в другое место.
  • вам не нужно выбирать слово, чтобы удалить его, если вы находитесь на R из Renderer, ты должен сделать dw удалить до конца текущего слова
Другие вопросы по тегам