Satır sonu eklemeden vim otomatik tamamlama listesinden bir öğe seçin


22

Vim'in oldukça can sıkıcı bir özelliği, ekleme modundaysanız ve otomatik tamamlama (Ctrl-N) yaparsanız, istenen öğenin aşağısına ok tuşuyla Enter tuşuna basmanız, öğeyi eklemeniz, ancak aynı zamanda sonra silmek zorunda.

Otomatik tamamlama listesinden bir istenmeyen satır daha eklemeden bir öğe seçmenin bir yolu var mı?


1
Benim için böyle değil ... Bir şey seçiyorum, Enter'a basıyorum ve imleç daha sonra hala aynı satırda.
goldilocks

Yanıtlar:


37

Hangi açılır menü durumuna bağlı olduğunuza bağlıdır (bkz. :help popupmenu-completion). Sorunuzdan 2. durumda olduğunuzu anlıyorum (bir tamamlama bulmak için ok tuşlarına bastığınızdan). Ancak, Enterdurum 2'deki varsayılan davranış tamamlamayı satırsonu olmadan eklemektir; Açıkladığınız şey normal olarak durum 1'in davranışıdır ( Ctrl+ N/ Ctrl+ kullandığınızdadır P).

Tüm eyaletlerde tutarlı bir şekilde çalışan bir yöntem Ctrl+ kullanmaktır Y. Y'yi "evet, bu kelimeyi kabul et" anlamına geldiğini hatırlamayı seviyorum. Geedoubleya'nın cevabındaki gibi şeyleri yeniden düzenlemediyseniz, tamamlanmış kelimeden sonra gelmesi gereken metni yazmaya başlamak da mümkündür.

Aynı bağlamda, menüyü iptal etmek ve metninizi çağırmadan önceki gibi bırakmak için Ctrl+ tuşuna basabilirsiniz E. Başka bağlamlarda Ctrl+ Eve Ctrl+ eşleşmelerine Yalışkınsanız (örneğin, normal modda yukarı veya aşağı kaydırmak veya ekleme modunda imlecin altına veya üstüne karakteri eklemek için), burada hatırlamanın bir yolu budur. Ayrıca menü veya benzeri "çıkılıyor" olarak da düşünebilir sanırım.

Daha fazlası :help popupmenu-keysiçin bakınız .


2
Ah ha, bu mantıklı. Açılır menüyü açmak için Ctrl-N kullanıyorum. Açılır menüde gezinmek için ok tuşlarını kullanıyorum. Açılır menüyü açmak için ok tuşlarını kullanabileceğinizi bilmiyordum.
Tyler Durden

Ok tuşları, varsayılan yapılandırmadaki açılır menüyü açamaz. Bahsettiğim ayrım açıldıktan sonra menüde gezinmekle ilgiliydi.
echristopherson

Nedense bunu <kbd> Ctrl </kbd> + <kbd> Y </kbd> ile yapmaya çalıştığımda da istenmeyen çizgiyi girintili hale getirdi. Bunun neden olacağına dair düşünceleriniz var mı?
mpacer

Hiç karşılaşmadım. Belki de bazı girinti ayarları veya unuttuğunuz bir eklenti nedeniyle. Vim'in posta listesine sorardım : vim.org/maillist.php .
echristopherson

6

Şahsen bunu kullanıyorum:

inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"

CtrlP eklentisini kullanan herkes bu eşleştirmeyi uygun bulabilir.


3

Bunun eski olduğunu biliyorum, ancak uthristopherson'ın cevabı bilgilendirici ve harika olmasına rağmen, kimse hızlı ve kirli bir çözüm istiyorsa, geedoubleya'nın cevabına bir tür domuzcuk desteği:

inoremap <expr> <cr> ((pumvisible())?("\<C-y>"):("\<cr>"))

2

Ok tuşlarınızı kullanmaya alternatif olarak , otomatik tamamlama listesinde gezinmek için j& ktuşlarınızı etkinleştirin .

Bunu yaptığınızda geçerli satır, siz kaydırdıkça seçilen kelimeyle eşleşir.

Bu nedenle, imleç değiştirilen sözcüğün sonunda ekleme modunda olduğundan enter tuşuna basmanız gerekmez.

Bunu etkinleştirmek için bunu .vimrc'nize ekleyin (stackoverflow'daki diğerlerine teşekkürler):

inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))

Ayrı olarak, ok tuşlarını kullanmak yerine Ctrl-n, seçeneklerde küfür edecekleri ( Ctrl-pgeri gitmek için) tekrarlayabilir ve hareket ettikçe, geçerli Entereşlemede tuş eşlemelerine gerek kalmaz veya vim tuş eşlemelerini değiştirirsiniz.


Bu davranış biraz kafa karıştırıcı olabilir, çünkü hem 1) ekleme modunda hem de 2) j ve k'yi ekleme modunda yapmadıkları şeyleri yorumlamaktır. Özellikle, bir menü girişi seçemez ve ardından bunu doğrudan j veya k ile başlayan bir şeyle takip edemezsiniz.
echristopherson

Kabul ettim, bu yüzden çok fazla bir adım olsaydı diğer seçeneği sağladım. Şahsen, okları kullanmak için elimi hareket ettirmek yerine karışıklığı tercih ederim.
geedoubleya
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.