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


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

28

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

inoremap jk <esc>
inoremap kj <esc>

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


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.