Существует несколько стандартный способ использования cnoreabbrev
/cnoremap
для этого: перед заменой X
с x
проверки, является ли это только символ в командной строке:
cnoremap <expr> X (getcmdtype() is# ':' && empty(getcmdline())) ? 'x' : 'X'
или
cnoreabbrev <expr> X (getcmdtype() is# ':' && getcmdline() is# 'X') ? 'x' : 'X'
. Разница в том, что вначале вы не наберете :Xfoo
(переведёте на :xfoo
), второй не будет, но не удастся ввести :X!
(будет переведен в :x!
, что действительно имеет смысл, в отличие от :X!
).
В отличие от поисковых запросов (/X
), input()
запрос и т. Д. И без разницы, если набрано X
не является первым.
как мне сделать вторую один не мешает мне печатание: X '? – BPm
@BPm Почему вы спрашиваете? Запуск ': X!' Throws "E477: Нет! разрешено ", переопределение': X' также невозможно. Если вы попросите переназначить что-то другое, тогда 'X' использовать дополнительное условие getchar (1) isnot char2nr ('!')'. – ZyX
Я спросил, потому что я склонен набирать ': W' по ошибке, но у другого плагина есть команда': W! '. Я попробую дополнительное условие. Благодаря! – BPm