Ekleme modunda <CR> işlemini geri al


21

Bazen ekleme modundayken <CR>yanlışlıkla çarptım ve bulunduğum yere geri dönmek için geri silme işlemine birkaç kez basmam gerekiyor (girintilere bağlı).

Örneğin

<div>
  <p> This is some text []</p>
</div>

İmleç []ve ben vurdum <CR>:

<div>
  <p> This is some text 
  []</p>
</div>

Şimdi bir önceki satıra geri dönmek için iki kez geri çekilmem gerekiyor (bu çok da kötü değil ama çok fazla girinti yok).

Yapmanın daha iyi bir yolunu biliyor musunuz?


1
ctrl+wİki kez oldukça kolay çalışmak ve gibi görünüyor
reergymerej

Yanıtlar:


10

Peki ya:

inoremap <C-\> <C-o>:left 0<Cr><BS>

<C-o>:left 0tüm girintileri kaldıracak normal bir mod komutu ( ) yürütecek, bu, imlecinizi satırın başına getirecektir. <BS>seni son satıra geri götüreceğim.

Bu biraz "geriye J" gibi.

Ne yazık ki, Shift + Enter veya Ctrl + Enter eşleştirmesi mümkün görünmüyor, bu yüzden <C-\>"enter tuşuna yakın" olarak seçiyorum .



2
Neden <C-u>yerine kullanmıyorsun <C-o>:left 0<CR>?
jamessan

@ jamessan Bu bir "geriye J" olarak çalışıyor : Öyleyse foo<CR>bar<C-\>sizi bırakacak foobar. IMHO daha kullanışlı, ama YMMV.
Martin Tournoij

Doğru, ama demek istediğim, <C-u>(yani, i_CTRL-U ) aynı olması gerektiğidir <C-o>:left 0<CR>.
jamessan

1
@ jamessan Eh, bu imleç konumuna bağlıdır. Yazma foo<CR>bar<C-u>sizi bırakacaktır foo<CR>(+ Vim'in ekleyebileceği herhangi bir otomatik girintiyi). <C-o>:left 0<CR>imleç konumundan bağımsız olarak daima aynı şekilde davranacaktır.
Martin Tournoij

21

Bende bu var vimrc, ikinci kısım ilgili:

inoremap <expr> <silent> <cr> pumvisible() ? "<c-y>" : "<c-g>u<cr>"

Bu ne yapar: her Enterekleme modundayken, aynı zamanda "geri alma sırasını kırar, yeni bir değişiklik başlatır" (bkz h: i_CTRL-G_u). Bu, Enteryanlışlıkla vurursanız , Statox'un önerdiği gibi , önceden veya eklenmiş satırları kaldırmadan değişikliklerinizi geri alabilirsiniz . Temel olarak, her satır ayrı ayrı geri alınabilir.ESC u aCtrl-o u

kaynak

DÜZENLEME / GÜNCELLEME: Eğer Emacs, yani kötü modda Vim emülasyonunu kullanıyorsanız, bu paketi benzer bir etki için kullanabilirsiniz .


Şimdi ilk kısmı ve <c-y>açılır menü ile nasıl bir ilgisi olduğunu merak ediyorum .
8bittree

2
Bu cevaba bakınız: vi.stackexchange.com/a/3844/1800 . Ctrl-yekleme modunda geçerli açılır seçimi tamamlar ve yukarıdaki eşleme de Entertamamlanmasına izin verir .
VanLaser

İyi numara. Ancak, ben muhtemelen son bölümünü değiştirecekti "<c-g>u<cr>"tarafından &paste ? "<cr>" : "<c-g>u<cr>"HTML 200 hatlar bunu geri almayı eğlenceli olacak, yanlışlıkla yapıştırmak aksi bir dahaki sefere. :)
lcd047

2
... ve açıklama: açık olduğunda paste, Ekleme modu eşlemeleri devre dışı bırakılır (Vim'in yardımına göre)
VanLaser

1
Bu çözümü daha çok seviyorum çünkü Backspace, Ctrl-W ve Ctrl-U'ya dayanan diğer çözümler backspaceseçeneğin nasıl ayarlandığına bağlı olarak çalışmayabilir .
doubleDown

4

Benim yaptığım gibi Ctrl-wBackspace.

Ctrl-wSon kelimeyi silmek için (Bu standart vim olup olmadığını unuttum), ve sadece boşluklardan beri beni satırın başına götürür. Sonra Backspacebeni olduğum yerdeki bir önceki çizgiye götürecek.


Tatlı, Ctrl-wek modda kullanımı hakkında bir şey bilmiyordum . Ancak Carpetsmoker ♦ hala daha hızlı. Bu nedenle, varsayılan 'Ctrl- \' bağlaması o kadar kullanışlı görünmüyor.
nobe4

1
W Ctrl + "standart um" ;-) bakınız olup: :help i_CTRL-W. Ve iki kez basmak da hile yapmak gibi görünüyor?
Martin Tournoij

1
Yeni <C-u>sayfadaki tüm karakterleri silerken daha yararlı olabilecek yardım sayfasında yeni bir şey gördüm
nobe4

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.