Vim
내가 프로그래밍 할 때 선호하는 텍스트 편집기이므로 항상 성가신 문제가 발생합니다.
종종 버퍼를 빠르게 저장하고 다른 기타 작업을 계속해야 할 때 일반적으로
:w
그러나, 시간의 50 % 이상인 것처럼 보이는 나는 항상 그것을 활용합니다 :w
. 당연히, vim W
은 잘못된 명령 이기 때문에 소리를 지 릅니다.
E492: Not an editor command: W
내 질문은 어떻게 vim에서 하나의 별칭 콜론 명령을 사용할 수 있는지 입니다. 특히에 별칭 W
을 지정 하는 방법을 예시 해 주시겠습니까 w
?
키 를 특정 명령 에 매핑 하는 프로세스를 알고 있습니다. 불행히도, 그것은 내가 찾고있는 것이 아닙니다.
답변
완성을 그대로 두려면
cnoreabbrev W w
, W
는 명령 행에서으로 대체 w
되지만 단어 문자가 앞에 오지 않고 앞에 오는 경우에만이므로 :W<CR>
로 대체 :w<CR>
되지만 :Write
그렇지 않습니다. (예를 들어 명령 :saveas W Z
이로 대체 될 수 있으므로 예상하지 못한 명령을 포함하여 일치하는 모든 명령에 영향을 미치 :saveas w Z
므로주의하십시오.)
최신 정보
다음은 내가 지금 쓰는 방법입니다 .
cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))
기능으로서 :
fun! SetupCommandAlias(from, to)
exec 'cnoreabbrev <expr> '.a:from
\ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
\ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")
명령 유형이 :
이고 명령이 W
이므로 확인하는 것보다 안전 cnoreabbrev W w
합니다.
답변
보충 검색을 통해 누군가가 나와 거의 같은 질문 을 한 것을 발견했습니다 .
:command <AliasName> <string of command to be aliased>
트릭을 할 것입니다.
로, 양해하여 주시기 바랍니다 Richo는 지적, 사용자 명령은 대문자로 시작해야합니다.
답변
;
키를 매핑 :
하는 것이 더 나은 솔루션이며 다른 명령을 입력하는 데 생산성이 높아질 것입니다.
nnoremap ; :
vnoremap ; :
답변
가장 좋은 해결책은 명령 모음의 시작 부분에서만 발생하는 약어를 처리하기위한 사용자 지정 함수 를 작성하는 것 입니다.
이를 위해 vimrc 파일 또는 다른 곳에 다음을 추가하십시오.
" 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')
몇 가지 소스 자료에서 유용한 약어 나는이 물건을 발견 :
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")
답변
기능 키 (F1..F12) 중 하나를 : w? 그런 다음 이것을 .vimrc에 넣으십시오.
noremap <f1> :w<return>
inoremap <f1> <c-o>:w<return>
(삽입 모드의 Ctrl-o는 일시적으로 일반 모드로 전환됩니다).
답변
gvim에서 tabnew 명령에 대한 별칭을 추가한다고 가정합니다. .vimrc 파일에 다음 명령을 입력하면됩니다 (홈 폴더에없는 경우 파일을 생성하는 것보다)
cabbrev t tabnew
답변
가장 안전하고 쉬운 방법은 cmdalias.vim 과 같은 플러그인 또는 최근에 업데이트 한 vim-alias 입니다.
- 예컨대 공백 또는 개질제 항
:sil(ent)(!)
또는:redi(r)
, '<,'>
현재 시각적 선택 과 같은 범위 수정 자- 따옴표와 같은 특수 문자를 피하고
- 선택한 별칭이 유효한 명령 줄 약어인지 확인하십시오.