Как вырезать текст в режиме вставки (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
удалить до конца текущего слова