이스케이프 이외의 삽입 모드를 종료하는 다른 방법


74

내가 emacs보다 vim을 좋아하는 주된 이유는 홈 행에서 멀리 떨어진 내 손의 이동 거리가 매우 낮기 때문입니다 (프로그래머조차도). 그러나이 작업을 수행하는 주요 시간은 Esc 키를 눌러 삽입 모드를 종료하는 것입니다.

최근에 Ctrl + C를 사용하여 삽입 모드를 종료 할 수 있다는 것을 알게되었습니다. 그러나 이것은 실제로 개선되지는 않습니다.

손이 홈 행을 벗어나지 않고 입력하는 기능에 큰 영향을 미치지 않으면 서 삽입 모드를 종료하려면 어떻게해야합니까? 참고 : 드보락 키보드 레이아웃과 함께 대부분 바닐라 빔을 사용하지만 쿼티 레이아웃에 대한 솔루션을 듣고 싶습니다.


1
어디에서나 키 조합을 매핑 할 수 있으며 다른 작업은 수행 할 수 없습니다. 이게 네가 말하는거야?
yo '

3
Ctrl + c 단축키 THX를 배웠습니다!
Philippe Gachoud

Caps Lock을 Esc로 매핑하는 것은 어떻습니까?
Kolob Canyon

@PhillippeGachaud : Esc 대신 Ctrl-C를 사용하지 마십시오. Ctrl-C는 이스케이프와 동일하지 않으며 강제 이스케이프이며 일부 상황에서는 다르게 동작 할 수 있습니다.
Lie Ryan

답변:


60

홈 행 위치 지정을 사용하는 경우 QWERTY 레이아웃에 잘 작동하므로 일반적인 바인딩은 jj 입니다.

inoremap jj <ESC>

이 경우 리터럴 jj을 입력하려면 두 번째 문자를 입력 할 때까지 기본적으로 1 초 동안 기다려야합니다. (자세한 :help 'timeout'내용 참조)

또한 c-o인서트를 꺼내어 하나의 일반 명령 을 수행 다음 다시 인서트로 넣을 수 있습니다.

http://vim.wikia.com/wiki/Avoid_the_escape_key


1
드보락 j에서 c열쇠입니다. 그래서 이것은 나쁘지 않을 것입니다 (입력하기 cc). 또한 hh(qwerty jkey = dvorak h)를 바인딩 할 수 있습니다 shhhhhhh. 입력 하거나 입력 한 경우에만 부팅됩니다 .
durron597

7
cc는 영어로 된 훨씬 일반적인 두 문자 키 조합입니다. 그 최선의 선택을하지 않을 수 있습니다 그래서
닉 J 아담스

4
흉내 내기는 jk어떻습니까? 드보라 크에 인접하지만 선호하는 언어에서 일반적으로 사용되지 않는 두 개의 키를 찾으십시오. tn예를 들어의 위치는에 해당 jk합니다.
David Lord

1
나는 좀이 좋아 jk/ kj도 드보르작의 출구 정상 모드; QWERTY 키보드의 "c"및 "v"키이므로 왼쪽 포인터와 가운데 손가락을 쉽게 사용할 수 있습니다.
alxndr

2
우리가 더 잘할 수 있다고 생각 ii합니다. 대신 사용하십시오. 그렇습니다. 집에서 손가락을 떼야하지만 여전히 편안합니다. 더 중요한 것은 손가락을 움직이지 않고도 모드 간을 전환 할 수 있습니다.
Sridhar Sarnobat는

38

내장 된 대안 옆에 <C-[><C-c><Esc>다른 사람에 의해 인용 키, 또 다른 인기있는 솔루션은 다시 매핑하는 것입니다 <CapsLock>추가로 탈출한다. 이것은 Qwerty와 Dvorak 키보드에서 모두 가능합니다.

이 방법으로 HomeRow에서 손을 떼지 않고 왼쪽 작은 손가락으로 Esc를 매우 쉽게 누를 수 있습니다.

다시 매핑을 수행 할 수 있습니다.

  • AutoHotKey 유틸리티를 사용하는 Windows의 경우 ;
  • KeyRemap4MacBook 유틸리티 및 기타를 사용하여 Mac에서 ;
  • Linux에서는 데스크탑 환경에 따라 다릅니다. 예를 들어 Linux Mint / Cinnamon의 경우 메뉴-> 키보드-> 키보드 레이아웃-> 캡 잠금 동작에서 적절한 옵션을 선택하기 만하면됩니다. 또는 xmodmap 프로그램을 사용하여 Xorg 레벨에서 다음 .Xmodmap파일을 실행하여 쉽게 리 맵핑 할 수 있습니다 .

    clear Lock
    keycode 0x42 = Escape
    

    로그인 자동 소스 파일 체인에 전략적으로 다음 쉘 스크립트 행 ( .Xmodmap홈 디렉토리에 있음 ~) 을 배치하여 모든 로그인마다 자동으로 시스템을 실행하도록 시스템을 설정할 수 있습니다 .

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    그러나 실제로 소스 파일은 사용 된 (데스크톱) 환경에 따라 다르므로 까다 롭습니다. 예를 들어, Cinnamon "Startup Applications"에 xmodmap이라는 항목이 있습니다 (표준 GUI 키 다시 매핑 사용자 지정보다 많은 작업을 수행 할 수 있음).

어떤 사람들은 더 나아가 CapsLock 키가 다음과 같이 작동하도록 프로그래밍합니다.

  • A와 Ctrl눌러 그것을 길게 키,
  • AS를 Esc눌러 빠르게 해방하여 키.

이는 해당 리맵 유틸리티를 올바르게 설정 / 프로그래밍하여 Windows 및 Mac에서 수행 할 수 있습니다 (특히 오토 핫키 힌트는 여기 및 KeyRemap4MacBook 확인은 여기 참조 ). Linux에서 xcape 프로그램을 사용하십시오 .


2
전적으로 동의. 홈 행에 ctrl 키를 사용하면 많은 사용 편의성이 향상됩니다 (ctrl + n을 사용하여 완료 스크롤, ctrl + f / ctrl + b를 사용하여 파일 스크롤, ctrl +로 탈출) 등.이 키 콤보를 모두 쉽게 수행 할 수 있습니다. 이런 식으로.
존 O'M.

1
작은 손가락 비틀 지 않고Ctrl 키를 누르는 방법에 대해 : 여기에 잘 설명 된 것처럼 손바닥의 외부 손바닥으로 키를 누를 수 있습니다 ( 'Net 에서이 멋진 영리한 트릭을 찾았습니다. back :) and kudos to it it)
Giovanni Maggiorani

FWIW KeyRemap4MacBook는 Karabiner 이름이 변경되었습니다 : pqrs.org/osx/karabiner/index.html.en을
alxndr

나는이 솔루션을 시도했지만 Shift를 몇 번 누를 때 실수로 Caps Lock을 쳤다는 것을 알았습니다. 따라서 마일리지는 왼쪽 새끼 손가락의 민첩성에 따라 달라질 수 있습니다. :)
대장장이

2
다시 매핑하는 경우 CtrlAlt( Cmd)와 그 반대의 경우도 마찬가지, 다음 <C-[> 정말 빛난다. 핑키는 약하고 엄지는 강합니다. QWERTY에서는 Dvorak에서는 그다지 좋지 않지만 수용 가능합니다.
내쉬 브릿지

28

내가 사용하는 매핑은 다음과 같습니다.

inoremap jk <esc>
inoremap kj <esc>

이 방법을 사용하면 간단하게 칠 수 jk먼저 누르는 일에 대해 걱정할 필요없이, 동시에.


70
그러나 나는 레이캬비크에서 블랙 잭을 연주하는 Edsgar Dijkstra를하는 것에 관한 책을 쓰고 있습니다! ;)
durron597

네덜란드어를 쓰고 싶다면 둘 다 끔찍합니다.
Hielke Walinga

12

<C-[><C-c>대한 두 가지 기본 대안 <Esc>입니다.

참조 :help i_<esc>:help i_ctrl-c의 차이점을 설명하는 <C-c><Esc>.


다시 말하지만 Ctrl은 Escape만큼 홈 행에서 멀리 떨어져 있기 때문에 개선 사항이 아닙니다.
durron597

4
@ durron597 QWERTY 키보드에서 Ctrl은 홈 행과 거리가 멀지 만 중요한 차이점이 있습니다 . 홈 행 아래 에 있습니다. Esc를 사용하면 손가락을 움직여 전체 손을 약간 회전시켜야합니다. 또한, <C-[>대칭이 좋습니다 (작은 손가락이 반대 방향으로 움직입니다).
wchargin


2
동의했다. 습관적으로 사용하면 <C-c>플러그인과 autocmd가 미묘하게 손상 될 수 있습니다.
David Lord

내 컴퓨터에서, 그것의 <C는 - [> 작동하지만,보다 등록 초 이상 반 소요 <참조>
알렉산더 밀스

4

외부 프로그램을 사용하지 않고도에 매핑 Caps Lock할 수 있습니다 .Control

  • 에서 맥 OS X 방문 > 조합 키 - 시스템 환경 설정> 키보드
  • 에서 리눅스 실행 :setxkbmap -option caps:ctrl_modifier
  • 에서 윈도우 레지스트리를 편집 할 수 있습니다.

이 가져다 Control쉽게 눌러이 홈 행에 모두 를 포함하여, 제어 수정 스트로크를 Ctrl-[하고 Ctrl-C빔 모두 종료 삽입 모드한다.

또한, 하단에 그의 대답 조반니는 매핑 제안 Caps Lock을 모두 수행 Control 하고 Escape 언론의 길이에 따라, 그러나 이것은 별도의 소프트웨어를 설치해야합니다.

Ctrl-[는 IS 선호하는 대안은 항상 같이 작동하기 때문에 Escape.

한 가지 눈에 띄는 차이 와 함께 Ctrl-C편집 떠날 때이다 블록 단위 영상 모드를 , Ctrl-C현재 라인에서의 변경 사항을 유지하지만, 변경을 반복하지 않을 것이다 해당 모드의 포인트가되는 블록의 다른 라인 이상을.

또한 약어를 확인하거나 InsertLeave 이벤트를 트리거하지 않습니다. 보다:help i_CTRL-C


4

내 플러그인 vim-easyescape 사용을 제안 합니다.

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

간단한 맵 시퀀스의 문제점 inoremap jj <ESC>은 입력 할 때마다 j또는 k삽입 모드에 있을 때 Vim이 일시 중지된다는 것입니다 (매핑 적용 여부를 결정하기 위해 다음 키를 기다리는 중). 일시 중지는 눈에 띄거나 눈에 띄지 않는 시각적 방해를 유발합니다. vim-easyescape 에는 이러한 문제가 없으며 사용자 정의 시간 초과를 지원합니다.


3

터미널 vi와 Vim에서 alt+ single-normal-mode-key는 대부분의 터미널에서 빠른 편집을 위해 작동합니다.

대부분의 터미널이 대체 문자로 대체 수정자를 전송하기 때문에 작동합니다. 예를 들어, alt+k터미널 에뮬레이터 를 입력 하면 실행중인 프로그램에 두 문자가 전송됩니다 : esc, k. Vi와 Vim은 이것을 예상대로 해석합니다. 이스케이프 때문에 인서트 모드를 떠나고 일반 모드 명령을 실행합니다 (예 : 커서를 한 줄 위로 이동).

터미널 에뮬레이터를 사용하는 경우 키보드에 스페이스 바 옆에 alt 키가 있으면 (엄지로 누르면서 홈 행에 손가락을 대고있는 경우) 삽입 모드를 종료하는 편리한 방법이 될 수 있습니다. 이 동작으로 일반 모드 명령을 실행해도 상관 없습니다.


2
무엇에 대해 자세히 설명해 주 single-normal-mode-key시겠습니까? 탈출을 의미합니까?
kenorb

일반 모드에서 사용하는 단일 키 누름은 Alt 키를 사용하여 삽입 모드에서 사용할 수 있습니다. 예를 들어 Alt + x는 문자를 삭제합니다.
ewatt

2
나는이 대답도 잘 이해하지 못한다. Alt + x는 실제로 일반 모드에서 Alt와 다른 것으로 보입니까? 그리고 다른 키가 작동하지 않는 것 같습니까? 하지만 어쩌면 내가 잘못 사용하고 있습니다 ..? 어쩌면 당신은 대답을 조금 확장하여 어떻게 작동하는지 설명 할 수 있으며 Vim 문서에 대한 링크도 좋습니다 :-) 감사합니다! :-)
Martin Tournoij

실제로는 터미널 구성에 따라 다르며 일반적으로 제안한 것처럼 설정되지 않습니다.
Christian Brabandt

1
나는 이것을 뒤집었고, 역사를 점검하고 어떤 이유로 중재자가 우리의 나머지 사람들이 할 것으로 예상되는 것처럼 의견을 남기지 않고 얇은 공기에서 텍스트의 99 %를 추가하도록 편집했음을 깨달았습니다. 그래서 나는 투표를 취소해야했다. 분명히 여기서 일어난 일은 합리적인 편집 범위를 넘어서는 것입니까? 나는 훨씬 덜 파괴적인 편집을 거부했다. 새로운 내용은 훌륭하지만이 답변에 속하지 않습니다. 그것은 그 자신의 것이어야했다.
underscore_d

3

다음을 사용합니다.

:map! ;l ^[
:vmap ;l ^[

Return 키를 누르는 것과 비슷합니다. 내가 사용 ;도 다른 삽입 모드 매핑의 지도자로.

';'을 입력해야하는 유일한 시간 + 문자는 코드 골프를 할 때입니다. 그렇지 않으면 갈등이 없었습니다.


아마도 ^ [에 매핑하는 것보다 이스케이프하도록 매핑하는 것이 더 낫습니까? :)
Alexander Mills

2

나는 꽤 오랫동안부터 Ctrl+를 사용해 왔으며 3, 대부분의 대안보다 타이핑하기가 쉽고 (적어도 Linux에서는) 잘 작동하는 것 같습니다. 내가 Caps Lock에 매핑되는 Ctrl, 그래서 그것을 입력하는 것은 매우 편안합니다.

나는 잠시 동안 Ctrl+ c를 사용해 보았지만 , 지금 정확히 기억하지 못하는 문제가 있었지만 Esc, Ctrl+로 지금 얻는 것처럼 똑같은 동작을 얻지 못했습니다 3.


2
Ctrl-3은 정확히 무엇을해야합니까?
Christian Brabandt

어떻게 작동하는지 모르겠지만 Esc바닐라 Vim 에서처럼 작동합니다 . 조합을 테스트하여 경험적으로 발견했으며 내부 작동 방식에 대한 세부 정보를 모릅니다.
elias

1
이것은 중요한 것이 아니며 쉘에서도 작동합니다. 경우에 매우 유용 당신은 bindkey와 쉘에 VI 모드를 활성화 한 -v
golfadas

1

미국 영어 키보드가있는 경우 Ctrl- [를 누르는 것은을 누르는 것과 같습니다 Esc. 이렇게하면 삽입 모드를 쉽게 종료 할 수 있습니다. 또는 Ctrl-를 사용하십시오 c.

easy 모드 ( -y) 에서 vim을 사용하는 경우 Ctrl- l(Control-L)을 눌러 삽입 모드를 종료해야합니다.

또한 하나의 명령을 실행하고 삽입 모드로 돌아 가기 위해 삽입 모드를 일시적으로 종료하는 Ctrl+ 도 o있습니다 (참조 :help i_CTRL-O)

또는 Ctrl+ r,하지만 그것은 단지 레지스터 또는 식, 예를 들면의 콘텐츠를 삽입하는 것 Ctrl+를 r, =5*5(: 참조 :help i_CTRL-R, :help c_CTRL-R유래 포스트 ).

에서 더 읽기 : Esc 키 피 정력 익명의를


3
참고로, Ctrl+r레지스트리 (식 =reg 포함)를 삽입하기위한 것 입니다. 일회용 명령을 일시적으로 실행하려면을 사용하십시오 Ctrl+o.
Sukima 2019

1

나는 <A-e>탈출 을 위해 정착했다 .

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

편집 : <C-\><C\n>다른 모드에서 어떤 모드가 일반 모드로 전송되는지 알았습니다 . 또한 전반적인 동작이 더 좋습니다. 매핑은 다음과 같습니다.

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>

0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

탭을 다시 매핑하여 종료합니다. 나는 역사적으로 그것이 esc 키가 있었던 곳이라고 생각합니다. 그래서 나는 그것을 사용했고 결코 뒤돌아 보지 않았습니다. 문서에 탭을 넣을 필요가 없으며 Shift + Tab을 누르면됩니다. 원래 탭 바인딩을 놓친 적이 없습니다.


vim과 emacs에 관한 단락은 완전히 불필요하다 ...
D. Ben Knoble 14
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.