Inne sposoby wyjścia z trybu Wstaw oprócz Escape


74

Głównym powodem, dla którego lubię vima nad emacsem, jest to, że moja odległość ruchu ręki od domowego rzędu jest bardzo mała (nawet jako programista). Jednak moim głównym zadaniem jest opuszczenie trybu wstawiania przez naciśnięcie klawisza Escape.

Niedawno dowiedziałem się, że mogę również użyć Ctrl + C, aby wyjść z trybu wstawiania. Jednak tak naprawdę nie jest to poprawa.

Jak wyjść z trybu wstawiania bez opuszczania przez dłonie domowego rzędu i bez znacznego wpływu na to, co mam do pisania? Uwaga: używam głównie waniliowego vima z układem klawiatury dvorak, chociaż chciałbym usłyszeć również rozwiązania dla układu qwerty.


1
Możesz zmapować dowolną kombinację klawiszy w dowolnym miejscu i nie możesz zrobić nic innego. Czy o to Ci chodziło?
yo „

3
Nauczyłem się skrótu Ctrl + c THX!
Philippe Gachoud

Co powiesz na mapowanie Caps Lock jako Esc?
Kolob Canyon

@PhillippeGachaud: Nie używaj Ctrl-C jako zamiennika Esc. Ctrl-C to nie to samo co Escape, to wymuszona Escape i może zachowywać się inaczej w niektórych okolicznościach.
Lie Ryan,

Odpowiedzi:


60

Powszechnym wiązaniem, które zobaczysz, jest jj , ponieważ działa dobrze dla układów QWERTY, jeśli używasz pozycjonowania wiersza głównego.

inoremap jj <ESC>

W takim przypadku, aby wpisać literał jj- należy odczekać 1 sekundę (domyślnie) między wpisaniem drugiego znaku. (zobacz :help 'timeout'szczegóły)

Jest też c-ocoś, co wyjmie cię z wkładki, umożliwiając wykonanie jednego normalnego polecenia, a następnie powrót z powrotem do wstawiania.

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


1
W dvorak jjest ckluczem. Więc to nie byłoby takie złe (do pisania cc). Mógłbym również powiązać hh(qwerty jkey = dvorak h), co uruchomiłoby mnie tylko, gdybym pisał shhhhhhhlub coś takiego.
durron597

7
cc jest znacznie popularniejszą dwuliterową kombinacją klawiszy, przynajmniej w języku angielskim. To może nie być najlepszy wybór
Nick J Adams

4
Co powiesz na naśladowanie jk? Znajdź dwa klucze, które sąsiadują z Dvorakiem, ale nie są to popularne kombinacje w preferowanym języku. tn, na przykład, jest pozycyjnym odpowiednikiem jk.
David Lord

1
Trochę lubię mieć jk/ kjwychodzę z trybu normalnego nawet w Dvorak; są to klawisze „c” i „v” na klawiaturze QWERTY, więc są łatwe dla mojego lewego wskaźnika i środkowych palców.
alxndr

2
Myślę, że możemy zrobić jeszcze lepiej - iizamiast tego użyj . Tak, musisz odsunąć palce od rzędu domu, ale nadal jest to wygodne. Co ważniejsze, możesz przełączać się między trybami bez ruszania palcem.
Sridhar Sarnobat

38

Oprócz wbudowanych rozwiązań alternatywnych <C-[>i <C-c>do <Esc>klucza cytowanego przez innych, innym popularnym rozwiązaniem jest przemapować <CapsLock>jako dodatkowy Escape. Zarówno na klawiaturze Qwerty, jak i Dvorak.

W ten sposób możesz bardzo łatwo nacisnąć Esc lewym palcem, bez zdejmowania rąk z HomeRow (nawiasem mówiąc, CapsLock to miejsce, w którym Escape był na klawiaturze, kiedy wynaleziono vi).

Ponowne mapowanie można wykonać:

  • w systemie Windows za pomocą narzędzia AutoHotKey ;
  • na Macu za pomocą narzędzia KeyRemap4MacBook i innych;
  • w systemie Linux różni się w zależności od środowiska pulpitu. Na przykład w Linux Mint / Cinnamon wystarczy wybrać odpowiednią opcję w menu-> Klawiatura-> Układy klawiatury-> Zachowanie Caps Lock. Alternatywnie, ale mniej łatwo, można go ponownie mapować na poziomie Xorg za pomocą programu xmodmap i uruchomienia następującego .Xmodmappliku:

    clear Lock
    keycode 0x42 = Escape
    

    System można skonfigurować tak, aby automatycznie uruchamiał go przy każdym logowaniu, umieszczając strategicznie następujące wiersze skryptu powłoki (przypuśćmy, że w katalogu .Xmodmapdomowym ~) w łańcuchu automatycznie pobieranych plików logowania:

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

    Jest to jednak trudne, ponieważ faktycznie pobierane pliki różnią się w zależności od używanego środowiska (komputerowego). Jako przykład mam xmodmap wywoływany jako wpis w Cinnamon „Startup Applications” (co pozwala mi robić więcej niż standardowe dostosowywanie mapowania klawiszy GUI).

Niektóre osoby idą jeszcze dalej i programują klawisz CapsLock, aby zachowywał się:

  • jako Ctrlklawisz przez naciśnięcie i przytrzymanie,
  • jako Escklawisz, naciskając i szybko zwalniając go.

Można to zrobić w systemach Windows i Mac, odpowiednio ustawiając / programując odpowiednie narzędzie do remapowania (szczególnie wskazówki AutoHotkey można znaleźć tutaj, a sprawdzenie KeyRemap4MacBook tutaj ). W systemie Linux przy użyciu programu xcape .


2
W pełni zgadzam się. Posiadanie klawisza Ctrl w wierszu głównym poprawia wiele użyteczności (przewijanie uzupełnień za pomocą Ctrl + n, przewijanie pliku za pomocą Ctrl + F / Ctrl + B, ucieczka za pomocą Ctrl +] itd. Wszystkie te kombinacje klawiszy są łatwiejsze do wykonania w ten sposób
John O'M.

1
O naciśnięciu Ctrlklawisza (w normalnej pozycji) bez skręcania małego palca: możesz nacisnąć go zewnętrzną dłonią dłoni, jak to jest dobrze opisane tutaj (znalazłem tę fajną sprytną sztuczkę w sieci, czas, aby ją dać powrót :) i podziękowania dla tego, kto to wymyślił)
Giovanni Maggiorani

Nazwa FWIW KeyRemap4MacBook została zmieniona na Karabiner: pqrs.org/osx/karabiner/index.html.en
alxndr

Wypróbowałem to rozwiązanie, ale okazało się, że przypadkowo wcisnąłem Caps Lock, naciskając kilka razy Shift, co było denerwujące. Twój przebieg może więc różnić się w zależności od tego, jak zwinny jest twój lewy róż. :)
Godsmith

2
Jeśli odwzorujesz Ctrlna Alt( Cmd) i odwrotnie, to <C-[> naprawdę będzie świecić. Pinky jest słaby, kciuk jest silny. W QWERTY nie musisz nawet wychodzić z tego wiersza, w Dvorak nie jest tak dobrze, ale do zaakceptowania.
Nash Bridges,

28

Używam mapowań:

inoremap jk <esc>
inoremap kj <esc>

W ten sposób możesz po prostu uderzyć ji kjednocześnie, nie martwiąc się o to, który wybierzesz jako pierwszy.


70
Ale piszę książkę o graniu Edsgara Dijkstry w blackjacka w Reykjaviku! ;)
durron597

Oba są okropne, jeśli chcesz pisać po holendersku.
Hielke Walinga

12

<C-[>i <C-c>są dwie natywne alternatywy dla <Esc>.

Zobacz :help i_<esc>i :help i_ctrl-cktóra wyjaśnia różnicę między <C-c>i <Esc>.


Ponownie, nie są to ulepszenia, ponieważ Ctrl jest tak samo daleko od głównego rzędu, jak Escape.
durron597

4
@ durron597 Na klawiaturze QWERTY Ctrl może być tak samo daleko od wiersza głównego, ale ma istotną różnicę: znajduje się poniżej wiersza głównego . Musisz tylko przesunąć palec, aby go nacisnąć, podczas gdy w Esc musisz nieco obrócić całą rękę. Ponadto, <C-[>ma ładny symetrię do niej (zarówno małe palce poruszające się w przeciwnych kierunkach).
wchargin


2
Zgoda. Zwykłe używanie <C-c>może subtelnie psować wtyczki i autocmds.
David Lord

Na mojej maszynie <C - [> działa, ale rejestracja zajmuje pół sekundy dłużej niż <Cc>
Alexander Mills

4

Można mapować Caps Lockdo Control bez użycia zewnętrznego programu :

To sprowadza Controlna rzędzie do domu, dzięki czemu łatwiej wcisnąć wszystkie kontrolne zmodyfikowany uderzeń, w tym Ctrl-[i Ctrl-Cktórych oba wyjścia trybie Insert w vim.

Alternatywnie, w dolnej części jego odpowiedź Giovanni sugeruje map Caps Lockwykonywać zarówno Control i Escape w zależności od długości prasy, ale to wymaga instalowania dodatkowego oprogramowania.

Ctrl-[jest preferowaną alternatywą , ponieważ zawsze działa jak Escape.

Jeden zauważalną różnicą ze Ctrl-Cjest to, że przy wyjeździe zmienił w trybie blokowo wizualnej , Ctrl-Cbędzie zachować zmiany wprowadzone w bieżącej linii, ale nie będzie powtarzać zmiany ponad innych linii w bloku, który jest punktem tego trybu.

Nie sprawdza również skrótów ani nie wyzwala zdarzenia InsertLeave. Widzieć:help i_CTRL-C


4

Sugeruję użycie mojej wtyczki 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>

Problem z prostą sekwencją map inoremap jj <ESC>polega na tym, że Vim wstrzymuje się przy każdym wpisywaniu jlub kw trybie wstawiania (czeka na następny klawisz, aby ustalić, czy zastosować mapowanie). Pauza powoduje rozproszenie wzrokowe, które możesz zauważyć lub nie. vim-easyescape nie ma takiego problemu i obsługuje niestandardowy limit czasu.


3

W terminalach vi i Vim alt+ single-normal-mode-keybędzie działać w celu szybkiej edycji w większości terminali.

Działa to, ponieważ większość terminali wysyła modyfikator alt jako znak zmiany znaczenia. Na przykład po wpisaniu alt+kemulator terminala wysyła dwa znaki do uruchomionego programu: esc, k. Vi i Vim interpretują to tak, jak można się spodziewać; opuszcza tryb wstawiania (z powodu ucieczki) i wykonuje polecenie trybu normalnego (w tym przykładzie przesuwa kursor w górę o jedną linię).

Może to być wygodny sposób na wyjście z trybu wstawiania, jeśli klawiatura ma klawisz Alt obok spacji (tak, że można go nacisnąć kciukiem, pozostawiając palce na rzędzie głównym), o ile używasz emulatora terminala z takim zachowaniem i nie przeszkadza uruchamianie polecenia trybu normalnego.


2
Czy możesz rozwinąć to, co jest single-normal-mode-key? Masz na myśli Escape?
kenorb

Pojedyncze naciśnięcie klawisza, którego użyłbyś w trybie normalnym, może być używane w trybie wstawiania za pomocą klawisza alt. np. Alt + x, aby usunąć znak.
ewatt

2
Nie do końca rozumiem tę odpowiedź; Alt + x faktycznie wydaje się robić coś innego niż Alt w trybie normalnym? A niektóre inne klucze wydają się nie działać? Ale może źle go używam? Może mógłbyś trochę rozwinąć swoją odpowiedź, aby wyjaśnić, jak to działa, i link do niektórych dokumentów Vima również byłby dobry :-) Dzięki! :-)
Martin Tournoij

zależy to od konfiguracji terminala i nie jest generalnie ustawiane, jak się wydaje.
Christian Brabandt,

1
Głosowałem za tym, a potem sprawdziłem historię i zdałem sobie sprawę, że z jakiegoś powodu moderator ją zredagował, aby dodać 99% tekstu z cienkiego powietrza, a nie pozostawiając komentarza, którego oczekuje się od reszty z nas. Musiałem więc cofnąć głos. Z pewnością to, co się tutaj wydarzyło, wykracza poza sensowne zmiany? Odrzucono znacznie mniej uciążliwe zmiany. Nowa treść jest świetna, jasne, ale nie należy do tej odpowiedzi. To powinno być własne.
underscore_d

3

FWIW używam:

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

Czuje się podobnie jak w przypadku Return. Używam również ;jako lidera dla innych mapowań w trybie Insert.

Jedyny raz, kiedy potrzebowałem pisać ';' + litera występuje podczas gry w golfa kodowego; W przeciwnym razie nie miałem żadnych konfliktów.


może lepiej zamapować go na ucieczkę niż zamapować na ^ [prawda? :)
Alexander Mills

2

Używam Ctrl+ 3od dłuższego czasu, łatwiej mi pisać niż większość alternatyw i wydaje się, że działa dobrze (przynajmniej w Linuksie). Mój Caps Lockjest mapowany na Ctrl, więc bardzo wygodnie jest go wpisać.

Próbowałem używać Ctrl+ cprzez pewien czas, ale miałem z tym pewne problemy, których teraz nie pamiętam, ale nie uzyskałem dokładnie takiego samego zachowania Esc, jak teraz z Ctrl+ 3.


2
Co dokładnie ma robić Ctrl-3?
Christian Brabandt,

Nie wiem, jak to działa, ale działa jak Escw waniliowym Vimie. Znalazłem to empirycznie, testując kombinacje, nie znam szczegółów na temat działania elementów wewnętrznych.
elias

1
To nie jest vi, działa również na powłokę. Bardzo przydatne, jeśli masz włączony tryb vi w powłoce z bindkey -v
golfadas

1

Jeśli masz klawiaturę w języku angielskim, naciśnięcie Ctrl- [jest równoważne naciśnięciu Esc. Zapewnia to łatwy sposób na wyjście z trybu wstawiania. Alternatywnie użyj Ctrl- c.

Jeśli jesteś w trybie łatwym ( -y), musisz nacisnąć Ctrl- l(Control-L), aby wyjść z trybu wstawiania.

Jest też Ctrl+, októry tylko tymczasowo wyjdzie z trybu wstawiania, aby wykonać jedno polecenie i powrócić do trybu wstawiania (patrz :help i_CTRL-O:)

Lub Ctrl+ r, ale to tylko do wstawiania zawartości rejestru lub wypowiedzi, np Ctrl+ r, =5*5(patrz :help i_CTRL-R, :help c_CTRL-Ra stackoverflow postu ).

Czytaj więcej na: Unikaj klawisza Escape na stronie vim wikia


3
FYI: Ctrl+rsłuży do wstawiania rejestrów (w tym wyrażenia =reg). Jeśli chcesz tymczasowo wykonać jednorazowe polecenie, użyj Ctrl+o.
Sukima,

1

Zdecydowałem się na <A-e>ucieczkę:

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>

Edycja: właśnie znalazłem informacje o tym, <C-\><C\n>który przesyła cię do normalnego trybu z dowolnego innego trybu. Ma również lepsze ogólne zachowanie. Mapowania stają się:

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>`^

Ponownie mapuję kartę, aby wyjść. Myślę, że historycznie tam był kiedyś klawisz esc, więc użyłem go i nigdy nie oglądałem się za siebie. Prawie nigdy nie muszę wstawiać tabulacji w dokumencie, a kiedy to robię, po prostu naciskam shift + tab. Nigdy nie przegapiłem oryginalnego wiązania tabulatorów.


Paragraf o vimie i emacsie jest zupełnie niepotrzebny ...
D. Ben Knoble
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.