': w'`를`: w`에 별명으로 지정하여'라는 이름의 파일을 작성하는 방법이 있습니까?


9

때때로, 내 pinky가 'enter에 도달하는 동안 키를 방목하여 결과를 얻습니다 :w'<Enter>.

난 노력 했어:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

그들 중 누구도 작동하지 않습니다. 에 별칭 :w'을 지정 하는 방법 이 :w있습니까?

또한 일반적인 명령 줄 대신 cmdwin ( :help cmdwin+ nnoremap : :<C-F>)을 사용하므로 보너스 포인트도 작동합니다.


답변:


8

Peter Rincker가 지적했듯이 cmaps는 다른 곳에서도 확장 cnoreabbrev될 수 있으므로 더 좋습니다 .

cnoreabbrev w' w

또는 피터 덕분에 가장 안전합니다.

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

명령 행에을 포함하는지 명시 적으로 확인하면 w'상황에 따라 원하지 않는 확장을 피할 수 있습니다.

당신은 사용할 수 있습니다 cmap:

cmap w' w

여전히을 (를) 눌러야 Enter하지만 우발적 '으로 무시해야합니다.

를 사용 cmdwin하는 경우 inoremap세트 기준 autocmd이 유용 할 수 있습니다.

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

나는 달렸 :cmap w' w지만 행동에는 변화가 없었다. :w'여전히이라는 파일에 쓰게됩니다 '. "'" [New] 0L, 0C written.
mwcz

@mwcz '다음에 누르면 실제로 표시 됩니까 w? 그것은이 안 경우 cmap성공적으로 작성 - cmap를의 LHS가 자동으로 당신이 키를 누르면 그래서, RHS로 채워집니다 ', 그것은 여전히 표시해야합니다 w.
muru

1
노출에주의 cmap의와 cabbrev의. 다른 모드 및 다른 장소에서 실행 / 확장됩니다. 예를 들어 :s/'follow'/foo/'follow'. 다음을 참조하시기 바랍니다 버퍼 대신 저장 및 종료 삭제 X 기능 : 정력 변경 또는 사용 cmdalias.vim
피터 Rincker을

1
죄송합니다.보다 안전합니다.cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker

예, '여전히 표시되지만 cmdwin을 사용하여 명령을 입력하고 cmdwin이 일반 버퍼 일뿐이므로 cmap/cnoreabbrev작동하지 않기 때문에 알았 습니다. noreabbrevcmdwin 사용자를위한 옵션으로 답변 업데이트 :) 감사!!!
mwcz

0

이 방법은 저에게 효과적입니다.

:ca w' w

또는 Esc를 두 번 눌렀을 때 현재 버퍼를 저장하도록 vim을 설정할 수 있습니다 (예 :

:map <Esc><Esc> :w<CR>

또는 다음 매핑을 사용하여 Ctrl+ s또는로 파일을 저장하십시오 F2.

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

참고 : F2는 필요한 경우에만 저장하고 필요에 따라 사용자를 삽입 모드 (또는 시각적 선택을 복원)로 되돌립니다.

출처 : vim wikia에서 파일 저장

또는 다음 대안을 사용하십시오.

  • :up에 대한 ( :update):w
  • ZQ ...에 대한 :q
  • ZZ대한 :wq:x

질문에서 따옴표를 확인하십시오. :w'아닙니다 :w. :w실수로 치는 '일 없이 사용하고 싶습니다 rm \'. 그러면 파일을 작성합니다 . 그래도 좋은 팁.
mwcz

1
Ctrl-S는 sigstop을 보내지 않습니다. 프로그램이 중지되면 버퍼가 가득 찼기 때문일 수 있습니다. 참조 unix.stackexchange.com/questions/13629/... '
muru의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.