Aliasing polecenia w Vimie
Vim
jest moim preferowanym edytorem tekstu, gdy programuję, a więc zawsze napotykam szczególnie irytujący problem.
Często, gdy szybko muszę zapisać bufor i kontynuować inne różne zadania, wykonuję typowe
:w
Jednak ja – co wydaje się być ponad 50% czasu-zawsze udaje mi się to wykorzystać :w
. Oczywiście, vim krzyczy na mnie, ponieważ W
jest nieprawidłowym poleceniem
E492: Not an editor command: W
Moje pytanie brzmi, jak można alias dwukropek-polecenia w vim . W szczególności, czy mógłbyś zilustrować, jak alias W
do w
.
Jestem świadomy procesu mapowanie kluczy do pewnych poleceń. Niestety, nie tego Szukam.
7 answers
Aby pozostawić zakończenie nietknięte, spróbuj użyć
cnoreabbrev W w
, zastąpi W
w wierszu poleceń na w
, ale tylko wtedy, gdy nie jest poprzedzone ani poprzedzone znakiem słowa, Więc :W<CR>
zostanie zastąpione :w<CR>
, ale :Write
nie będzie. (zauważ, że dotyczy to wszystkich poleceń, które pasują, w tym tych, których możesz się nie spodziewać, na przykład polecenie :saveas W Z
zostanie zastąpione przez :saveas w Z
, więc bądź ostrożny z tym.)
Update
Oto jak bym to napisał teraz :
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))
Jako funkcja:
fun! SetupCommandAlias(from, to)
exec 'cnoreabbrev <expr> '.a:from
\ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
\ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")
Sprawdza, czy typ polecenia to :
, A polecenie to W
, więc jest bezpieczniejsze niż tylko cnoreabbrev W w
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-24 11:55:03
Z dodatkowych poszukiwań, znalazłem, że ktoś zadał prawie to samo pytanie Jak Ja.
:command <AliasName> <string of command to be aliased>
Da radę.
Należy pamiętać, że jak wskazuje Richo, polecenie użytkownika musi zaczynać się od dużej litery.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:20
Uważam, że mapowanie klucza ;
na :
byłoby lepszym rozwiązaniem i zwiększyłoby produktywność przy wpisywaniu innych poleceń.
nnoremap ; :
vnoremap ; :
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-13 17:50:41
Może chciałbyś zmapować jeden ze swoich klawiszy funkcyjnych (F1..F12) do: w ? Więc włóż to do swojego .vimrc:
noremap <f1> :w<return>
inoremap <f1> <c-o>:w<return>
(ctrl-o w trybie wstawiania przełącza się tymczasowo na tryb normalny).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-07 06:36:10
Najlepszym rozwiązaniem jest napisanie niestandardowej funkcji do obsługi skrótów, które mają miejsce tylko na początku paska poleceń.
W tym celu dodaj następujący plik vimrc lub gdziekolwiek indziej.
" cabs - less stupidity {{{
fu! Single_quote(str)
return "'" . substitute(copy(a:str), "'", "''", 'g') . "'"
endfu
fu! Cabbrev(key, value)
exe printf('cabbrev <expr> %s (getcmdtype() == ":" && getcmdpos() <= %d) ? %s : %s',
\ a:key, 1+len(a:key), Single_quote(a:value), Single_quote(a:key))
endfu
"}}}
" use this custom function for cabbrevations. This makes sure that they only
" apply in the beginning of a command. Else we might end up with stuff like
" :%s/\vfoo/\v/\vbar/
" if we happen to move backwards in the pattern.
" For example:
call Cabbrev('W', 'w')
Kilka użytecznych skrótów z materiału źródłowego gdzie znalazłem to:
call Cabbrev('/', '/\v')
call Cabbrev('?', '?\v')
call Cabbrev('s/', 's/\v')
call Cabbrev('%s/', '%s/\v')
call Cabbrev('s#', 's#\v')
call Cabbrev('%s#', '%s#\v')
call Cabbrev('s@', 's@\v')
call Cabbrev('%s@', '%s@\v')
call Cabbrev('s!', 's!\v')
call Cabbrev('%s!', '%s!\v')
call Cabbrev('s%', 's%\v')
call Cabbrev('%s%', '%s%\v')
call Cabbrev("'<,'>s/", "'<,'>s/\v")
call Cabbrev("'<,'>s#", "'<,'>s#\v")
call Cabbrev("'<,'>s@", "'<,'>s@\v")
call Cabbrev("'<,'>s!", "'<,'>s!\v")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-22 19:22:13
Załóżmy, że chcesz dodać alias dla polecenia tabnew w gvim. możesz po prostu wpisać następujące polecenie w swoim .plik vimrc (jeśli nie znajduje się w folderze domowym, to utwórz go)
cabbrev t tabnew
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-27 05:20:50
Najbezpieczniejszy i najłatwiejszy jest plugin taki jak cmdalias.vim lub moja ostatnia aktualizacja vim-alias z tego, że wziąć pod uwagę
- poprzedzające spacje lub modyfikatory, takie jak
:sil(ent)(!)
LUB:redi(r)
, - modyfikatory zakresu, takie jak
'<,'>
dla bieżącego wyboru wizualnego, - unikaj znaków specjalnych, takich jak cudzysłowy i
- sprawdź, czy wybrany alias jest prawidłowym skrótem wiersza poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 17:45:57