2013-07-22 15 views
6

znajdę się uderzając :X kiedy myśli o wpisanie :xWyłącz szyfrowanie: X w vim

Czy istnieje sposób, aby wyłączyć :X jak szyfrowanie, dzięki czemu wpisując :X w vim nie ma wpływu?

Zakładam, że istnieje polecenie, które można umieścić w pliku .vimrc?

Odpowiedz

9

Jest dość standardowy sposób korzystania cnoreabbrev/cnoremap na to: Przed wymianą X z x sprawdzenia, czy jest to tylko postać na linii poleceń:

cnoremap <expr> X (getcmdtype() is# ':' && empty(getcmdline())) ? 'x' : 'X' 

lub

cnoreabbrev <expr> X (getcmdtype() is# ':' && getcmdline() is# 'X') ? 'x' : 'X' 

. Różnica polega na tym, że najpierw uniemożliwisz wpisanie :Xfoo (przetłumaczysz na :xfoo), a drugi nie, ale uniemożliwi wpisanie :X! (przełoży się na :x!, co rzeczywiście ma sens w przeciwieństwie do :X!).

Nie ma dokładnie różnicy w wyszukiwaniu (/X jest w porządku), input() monit i tak dalej i bez różnicy, czy wpisano X nie jest pierwszą.

+0

jak mogę zrobić drugi nie przeszkadza mi wpisując ':' X? – BPm

+0

@BPm Dlaczego pytasz? Uruchamianie ': X!' Wyrzuca "E477: Nie! allowed ", redefining': X' również nie jest możliwe. Jeśli poprosisz o ponowne odwzorowanie czegoś innego, wówczas 'X' użyje dodatkowego warunku' getchar (1) isnot char2nr ('!') '. – ZyX

+0

Pytam, ponieważ mam tendencję do wpisywania ': W' przez pomyłkę, ale inna wtyczka ma polecenie': W! '. Wypróbuję dodatkowy warunek. Dzięki! – BPm

1

Można użyć :cmap do map X do X, ale istnieją skutki uboczne, jak nie jest w stanie korzystać literę X gdziekolwiek

:cmap X x 

Dla nieco mniej inwazyjny wersji

:cmap X^M x^M 

który będzie odwzorowywał tylko X na x, kiedy natychmiast wejdziesz w Enter.

5

Zastosowanie :cnoreabbrev przesłonić :X z taką samą funkcjonalność jak :x:

cnoreabbrev X x 

:cnoreabbrev korzystne jest :cabbrev od :x może już być odwzorowane na coś innego.

Ogólnie rzecz biorąc, użycie cabbrev wpłynie na wszystkie jednoliterowe słowa X w linii komend, np. :X X przetłumaczy na :x x, prawdopodobnie nie to, co jest przeznaczone. Zobacz odpowiedź @ ZyX na poprawkę do tego.