Я знаю, что это, вероятно, лучше решить, не набирая неряшливо во-первых, но я просто думаю, что было бы очень приятно иметь.

Так как я использовал Vim некоторое время, ;w (я сопоставляются нормальный ; : немного рефлекса для меня. Однако, что мне не нравится, так это то, что иногда я печатаю быстро, и это приводит к плохим вещам.

Взгляни на мой vimrc ...

"""" Commenting out cmaps because cmap applies when e.g. typing in (/)-search mode
" " prevent common typos from actually writing files to disk
" cmap wq1 wq!
" cmap w1 w!
" cmap q1 q!
" cmap qa1 qa!
" cmap e1 e!
"
" cmap w; w
"
" cmap qw wq
" cmap qw! wq!
" cmap qw1 wq!
"
" " and more combinatorially exploding goodness for dealing with flubbing the
" " enter key
" cmap wq\ wq
" cmap wq1\ wq!
" cmap wq!\ wq!
" cmap w\ w
" cmap w1\ w!
" cmap w!\ w!

Это продолжается на 50 или более строк.

Все они прокомментированы, потому что cmap применяется при использовании / для поиска. Это сделка

И это даже не распространяется на случаи, когда я пишу :w а затем случается мешать какой-то специальный символ после него, и это как-то заставляет vim записывать буфер в файл с именем этого символа. Отличный способ потерять работу.

Есть идеи? Это потребует от меня редактирования исходного кода vim, не так ли ...

1 ответ1

2

Вы правы, недостатком :cmap является то, что он применяется ко всем режимам командной строки, поэтому он также не позволяет искать эти строки.

Одним из решений является проверка типа режима командной строки с помощью сопоставления выражений:

cnoremap <expr> w1 getcmdtype() == ':' ? 'w!' : 'w1'

Если вы сообразительны, вы можете выполнять метапрограммирование и определять все свои отображения в цикле, просто передавая исходную и целевую строки.

Даже эти измененные сопоставления все еще не позволяют вам вводить эти сопоставленные строки, например, в качестве аргументов команды (так что вы не можете легко это сделать :w w1 , только экранируя последнее через <C-V>).

Plugin

Cmdalias.vim - Плагин создания псевдонимов для команд Vim также проверяет положение команды и, следовательно, обрабатывает аргументы. Он также предлагает удобную команду :Alias , поэтому вам не нужно выполнять метапрограммирование.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .