Escape dışında Insert modundan çıkmanın diğer yolları


74

Emacs üzerindeki vim'i sevmemin en önemli nedeni, evdeki hareket mesafesinden el hareket mesafemin çok düşük olması (programcı olarak bile). Ancak, bunu yaptığım bir ana süre Escape tuşuna basarak ekleme modunu terk ediyor.

Kısa süre önce insert modundan çıkmak için Ctrl + C tuşlarını kullanabileceğimi öğrendim. Ancak, bu gerçekten bir gelişme değil.

Ekleme modundan ellerim ana hattan çıkmadan ve yazma yeteneğimi büyük ölçüde etkilemeden nasıl geçebilirim? Not: Ben dvorak klavye düzeni ile çoğunlukla vanilya vim kullanıyorum, ancak bir qwerty düzeni için de çözümler duymayı çok isterim.


1
Herhangi bir tuş birleşimini herhangi bir yerde haritalandırabilir ve başka hiçbir şey yapamazsınız. Demek istediğin bu mu?
yo

3
Ctrl + c kısayol THX öğrendim!
Philippe Gachoud

Caps Lock'u Esc olarak eşlemeye ne dersiniz?
Kolob Kanyonu,

@PhillippeGachaud: Estr yerine Ctrl-C kullanmayın. Ctrl-C Escape ile aynı değildir, zorunlu bir Escape'dir ve bazı durumlarda farklı davranışlar gösterebilir .
Lie Ryan,

Yanıtlar:


60

Göreceğiniz genel bir bağlama jj'dir çünkü ana satır konumlandırmasını kullanırsanız QWERTY mizanpajları için iyi çalışır.

inoremap jj <ESC>

Bu durumda, değişmez bir jjyazı yazmak için - ikinci karakteri yazarken 1 saniye (varsayılan olarak) beklemelisiniz. ( :help 'timeout'ayrıntılar için bakınız)

Orada da c-osen yapmasına izin, ekin dışarı götürecek bir Normal komutu ve sonra ekin içine doğru geri koyuyor.

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


1
Dvorak, jbir canahtar. Yani bu (yazmak için cc) çok kötü olmaz . Ayrıca hh(qwerty jkey = dvorak h) ' ı da bağlayabilirdim , bu da sadece yazıyor olsaydım shhhhhhhya da bir şey yaparsam önyükleme yapardı .
durron597,

7
cc, en azından İngilizce olarak çok daha yaygın bir iki harfli tuş birleşimidir. Öyleyse bu en iyi seçenek olmayabilir
Nick J Adams

4
Taklit etmeye ne dersin jk? Dvorak'ta bitişik fakat tercih ettiğiniz dilde genel kombinasyonlar olmayan iki anahtar bulun. tnörneğin, konumsal eşdeğerdir jk.
David Lord,

1
Dvorak'ta bile normal moddan çıkmak jk/ kjçıkmak gibi bir şey ; Onlar bir QWERTY klavyedeki "c" ve "v" tuşları, bu yüzden sol işaretçi ve orta parmaklarım için kolay.
alxndr

2
Daha iyisini yapabileceğimizi düşünüyorum - iibunun yerine kullanın. Evet, parmaklarınızı ana satırdan çekmeniz gerekiyor ama yine de rahat. Daha da önemlisi, parmağınızı hareket ettirmeden modlar arasında ileri ve geri geçiş yapabilirsiniz.
Sridhar Sarnobat

38

Yerleşik alternatifleri yanında <C-[>ve <C-c>hiç <Esc>başkaları tarafından belirtilen anahtarla, bir başka popüler çözüm yeniden eşleştirmek için <CapsLock>ek bir Escape olarak. Bu hem Qwerty hem de Dvorak klavyesinde.

Bu şekilde, sol küçük parmağınızla, HomeRow'dan ellerinizi çıkarmadan Esc'e çok kolay bir şekilde basabilirsiniz (bu arada, CapsLock, vi'nin icat edildiğinde Escape'in klavyelerde olduğu yerdir).

Remapping yapılabilir:

  • Windows'ta AutoHotKey yardımcı programını kullanarak ;
  • Mac üzerinde KeyRemap4MacBook yardımcı programını ve diğerlerini kullanarak ;
  • Linux'ta, Masaüstü Ortamına göre değişir. Örneğin Linux Mint / Tarçın'da Menü-> Klavye-> Klavye Düzenleri-> Büyük Harf Kilidi davranışında doğru seçeneği seçmek meselesidir. Alternatif olarak, ancak daha az kolay bir şekilde, xmodmap programını kullanarak ve aşağıdaki .Xmodmapdosyayı çalıştırdıktan sonra Xorg düzeyinde yeniden gönderilebilir :

    clear Lock
    keycode 0x42 = Escape
    

    Sistem, otomatik olarak oturum açma otomatik kaynaklı dosyalar zincirinde aşağıdaki kabuk komut satırlarını (varsayalım .Xmodmapana dizinizdedir ~) stratejik olarak yerleştirerek her oturum açmada otomatik olarak çalışacak şekilde ayarlanabilir :

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

    Ancak zor, çünkü kaynaklı dosyalar kullanılan (masaüstü) ortama göre değişir. Örneğin, Tarçın "Başlangıç ​​Uygulamaları" na giriş olarak adlandırılan xmodmap'ım var (ki bu, standart GUI anahtarının yeniden uyarlanması özelleştirme işleminden daha fazlasını yapmamı sağlıyor).

Bazı insanlar daha da ileri gider ve CapsLock anahtarını davranacak şekilde programlar:

  • Ctrltuşunu basılı tutarak anahtar olarak
  • Esctuşuna basıp hızla bırakarak bir tuş olarak

Bu, ilgili remap yardımcı programını doğru şekilde ayarlayarak / programlayarak Windows ve Mac'te yapılabilir (özellikle AutoHotkey ipuçları için burada ve KeyRemap4MacBook kontrolü burada bulunabilir ). Linux'taki program kullanarak xcape .


2
Tamamen katılıyorum. Ctrl anahtarının giriş satırında kullanılması, kullanılabilirliği çok arttırır (ctrl + n ile tamamlama, ctrl + f / ctrl + b ile dosyaya kaydırma, ctrl + ile kaçma] vb. Bu taraftan.
John O'M State and Local.

1
Basarak Hakkında Ctrl(düzenli pozisyonda) tuşuna olmadan küçük parmak büküm: iyi açıklanan gibi, elin dış avucunuzun içiyle basabilirsiniz burada (ı 'Net bu güzel hünerini bulundu, zaman vermek geri :) ve kim icat etti
şerefine

FWIW KeyRemap4MacBook, Karabiner olarak değiştirildi: pqrs.org/osx/karabiner/index.html.en
alxndr

Bu çözümü denedim, ancak Shift tuşuna basarken sinir bozucu olan Caps Lock'a çarptığımı gördüm. Bu yüzden kilometreniz, sol pembenin ne kadar çevik olduğuna bağlı olarak değişebilir. :)
Godsmith 26:16

2
Eğer ( ) 'ya yeniden basarsanız Ctrlya da tam tersi, o zaman gerçekten parlar. Pinky zayıf, başparmak güçlü. QWERTY'da bunun için evden ayrılmanıza bile gerek yok, Dvorak'ta o kadar iyi değil ama kabul edilebilir. AltCmd <C-[>
Nash Bridges

28

Kullandığım eşlemeler:

inoremap jk <esc>
inoremap kj <esc>

Bu şekilde, ilk önce hangisine basacağınız konusunda endişelenmenize gerek kalmadan , basitçe jve kaynı anda vurabilirsiniz .


70
Ama Reykjavik’te Edsgar Dijkstra’nın blackjack oynaması hakkında bir kitap yazıyorum! ;)
durron597

Hollandalı yazmak istersen her ikisi de korkunç.
Hielke Walinga

12

<C-[>ve <C-c>iki alternatif alternatiftir <Esc>.

Bkz :help i_<esc>ve :help i_ctrl-carasındaki farkı açıklar <C-c>ve <Esc>.


Yine, bu gelişmeler değildir, çünkü Ctrl, Escape gibi evdeki sıradan çok uzaktır.
durron597

4
@ durron597 Bir QWERTY klavyede, Ctrl ana satırdan çok uzakta olabilir, ancak önemli bir farkı var: ana satırın altında . Sadece basmak için parmağınızı hareket ettirmeniz gerekir, oysa Esc ile tüm elinizi biraz döndürmeniz gerekir. Ayrıca, <C-[>hoş bir simetriye sahiptir (her iki küçük parmağın zıt yönlerde hareket etmesi).
wchargin

6
Bu <C-c> tamamen aynı olmadığını<Esc> unutmayın .
wchargin

2
Kabul. <C-c>Alışkanlık kullanımı, eklentileri ve otomatik cmds'leri ustaca kırabilir.
David Lord,

Makinemde <C - [> işe yarıyor, ancak kayıt olmak <Cc>
Alexander Mills

4

Herhangi bir harici program kullanmadan harita Caps Lockoluşturabilirsiniz :Control

  • In Mac OS X ziyareti > Değiştirici Keys - Sistem Tercihleri> Klavye
  • In Linux çalıştırın:setxkbmap -option caps:ctrl_modifier
  • In Windows'da kayıt düzenleyin.

Bu Control, giriş sırasını getirir ve Vim'deki Insert modundan her ikisi de dahil olmak üzere, tüm Control modifiye stroklara basılmasını kolaylaştırır .Ctrl-[Ctrl-C

Alternatif olarak, cevabının alt kısmında Giovanni, Caps Lockher ikisini de yapmak için Control ve Escape baskı uzunluğuna bağlı olarak harita çizmeyi önerir , ancak bu, fazladan yazılım yüklemeyi gerektirir.

Ctrl-[her zaman olduğu gibi çalıştığı için tercih edilen alternatiftirEscape .

Bir fark fark ile Ctrl-Cbir düzenleme çıkarken olmasıdır blok yönünde görsel modda , Ctrl-Cmevcut hat üzerinde yapılan değişiklikleri tutacak, ancak değişiklikleri tekrarlamak istemiyorum o modun noktasıdır blokta, diğer hatlar üzerinde.

Ayrıca kısaltmaları denetlemez veya InsertLeave olayını tetiklemez. Görmek:help i_CTRL-C


4

Eklenti vim-easyescape'imi kullanmanızı öneririm .

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

Basit bir harita sekansındaki sorun inoremap jj <ESC>, Vim'in her yazdığınızda jveya kekleme modunda duraklatılacağıdır (eşlemenin uygulanıp uygulanmayacağını belirlemek için bir sonraki anahtarı bekliyor). Duraklama, farkedebileceğiniz veya etmeyeceğiniz görsel dikkatin dağılmasına neden olur. vim-easyescape böyle bir problemi yoktur ve özel zaman aşımını destekler.


3

Vi ve Vim terminallerinde alt+ single-normal-mode-key, çoğu terminalde hızlı düzenlemeler için çalışacaktır.

Bu, çoğu terminalin alt değiştiriciyi kaçış karakteri olarak göndermesi nedeniyle işe yarıyor. Örneğin alt+k, terminal emülatörü yazdığınızda , çalışan programa iki karakter gönderir: esc, k. Vi ve Vim bunu beklediğiniz gibi yorumlar; insert modundan çıkar (kaçış nedeniyle) ve normal mod komutunu çalıştırır (örn. imleci bir satır yukarı hareket ettirir).

Klavyenizde boşluk çubuğunun yanında bir alt tuş varsa (parmaklarınızla basıldığında, parmaklarınızı giriş satırında bırakarak), bir terminal emülatörü kullandığınız sürece bu ekleme modundan çıkmak için uygun bir yol olabilir. Bu davranış ve normal mod komut çalıştırma aldırma.


2
Ne olduğunu açıklayabilir misin single-normal-mode-key? Kaçış mı demek istiyorsun?
kenorb

Normal modda kullanacağınız tek tuşa basma modunda alt tuş ile kullanılabilir. örneğin bir karakteri silmek için Alt + x.
ewatt

2
Bu cevabı da tam anlamıyorum; Alt + x aslında normal modda Alt'tan farklı bir şey yapıyor gibi görünüyor? Ve diğer bazı anahtarlar çalışmıyor gibi görünüyor? Ama belki yanlış kullanıyorum ..? Belki nasıl çalıştığını açıklamak için cevabınızı biraz genişletebilir ve bazı Vim belgelerine bağlantı da iyi olurdu :-) Teşekkürler! :-)
Martin Tournoij

bu aslında terminal konfigürasyonunuza bağlıdır ve genellikle önerdiğiniz gibi ayarlanmamış.
Christian Brabandt

1
Bunu yok ettim, daha sonra tarihi kontrol ettim ve bir nedenle bir moderatörün sadece% 99'unu ince havadan eklemek için düzenlediğini fark ettim; Bu yüzden oyumu geri çevirmek zorunda kaldım. Kuşkusuz burada ne oldu, mantıklı düzenlemelerin kapsamı dışına çıkıyor? Yıkıcı düzenlemeler çok daha az reddedildi. Yeni içerik harika, elbette, ancak bu cevaba ait değil. Kendi olmalıydı.
underscore_d

3

FWIW Kullanıyorum:

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

Return vurmak gibi hissettiriyor. ;Diğer Ekleme modu eşlemeleri için de lider olarak kullanıyorum .

Yazmam gereken tek zaman ';' + kodu, golf kodunu yazdığı zamandır; Aksi halde herhangi bir çatışma yaşamadım.


belki kaçmak için haritalandırmaktan daha iyidir ^ [doğru? :)
Alexander Mills,

2

CtrlUzun 3zamandan beri + kullanıyorum , yazmayı birçok alternatiften daha kolay buluyorum ve iyi çalışıyor gibi görünüyor (en azından Linux'ta). Benim Caps Lockharitalı Ctrl, bu yüzden yazmak çok rahat.

Bir süre için Ctrl+ kullanarak denedim c, ancak şu anda tam olarak hatırlamadığım bazı problemlerim vardı, fakat Escşu anda Ctrl+ ile olduğu gibi aynı davranışı alamadım 3.


2
Ctrl-3'ün tam olarak ne yapması gerekiyor?
Christian Brabandt,

Nasıl çalıştığını bilmiyorum ama Escvanilya Vim'de olduğu gibi çalışıyor . Kombinasyonları test ederek deneysel olarak buldum, içsellerin nasıl çalıştığıyla ilgili detayları bilmiyorum.
elias

1
Bu önemli bir şey değil, kabuk üzerinde de çalışıyor.
Bindkey

1

ABD İngilizcesi klavyeniz varsa Ctrl- - tuşuna basmak [eşdeğerdir Esc. Bu, ekleme modundan çıkmak için kolay bir yol sağlar. Alternatif olarak kullanın Ctrl- c.

Kolay modda vim kullanıyorsanız ( -y), ekleme modundan çıkmak için Ctrl- l(Control-L) tuşuna basmanız gerekir.

Orada da Ctrl+ osadece geçici çıkış insert modu sadece bir komut çalıştırmak için ve ekleme moduna geri dönecektir (bkz: :help i_CTRL-O)

Ya Ctrl+ r, ancak yalnızca kayıt veya ifadenin, örneğin içeriğini eklemek için oluyor Ctrl+ r, =5*5(: bakınız :help i_CTRL-R, :help c_CTRL-Rve stackoverflow sonrası ).

Daha fazla bilgi için: vim wikia'daki kaçış anahtarından kaçının


3
FYI: Ctrl+rkayıtları eklemek içindir ( =reg ifadesi dahil ). Geçici olarak bir tane off komutu kullanmak isterseniz Ctrl+o.
Sukima

1

<A-e>Kaçış için yerleştim :

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>

Düzenleme: Sadece <C-\><C\n>sizi başka bir moddan normal moda hangi yolla gönderdiğini buldum . Aynı zamanda daha iyi bir genel davranışa sahiptir. Eşlemeler şu şekilde olur:

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

Çıkmak için sekme remap. Eskiden esc anahtarının olduğu yer olduğunu düşünüyorum, bu yüzden kullandım ve bir daha arkama bakmadım. Bir belgede bir sekme koymaya hiç ihtiyacım olmadı ve yaptığım zaman sadece shift + tab tuşlarına basın. Orijinal sekme bağlantısını hiç bir zaman özlemedim.


Vim ve emacs hakkında paragraf tamamen gereksizdir ...
D. Ben Knoble
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.