İmleç neden <Esc> sonrasında satırın başına gider?


12

Ekleme modunda bir .txt dosyasındaki bir satır boyunca düzenleme yaparken imleç anahtar dizisini kullanarak bir yazma işleminden sonra satırın başına geçecektir:

<esc>:w

Bu davranışı, imleç a: write sonrasında pozisyonda kalacak şekilde değiştirmek istiyorum . Mümkün mü? İmlecin ekleme modunda kalmasına gerek yok, sadece bir yazma işleminden sonra son konumunu korumak istiyorum.

Windows'ta gVim 7.4 kullanıyorum. Benim .vimrc çok basit, ayarlarımın bu davranışa müdahale ettiğine inanmıyorum. Ayrıca mswin.vim ve example.vim kaynağını .vimrc dosyamdan kaldırdım (resmi vim.org windows yükleyicisiyle birlikte).

Aşağıdaki yorumları okuduktan sonra tekrar konuya baktım ve imlecin yalnızca tamamen boşluktan oluşan satırlara yazıldıktan sonra en solda kayar olduğunu fark ettim. Başka bir deyişle, satır boşlukların dışında başka karakter içermeyen asılı girintiyse imleç esc-: w üzerinde en sola kayar . .Vimrc girinti davranışlarını şu ayarlarla yönetiyor:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

Bu nedenle, girintili bir çizginin altında oluşturulan yeni bir çizgi, çizginin ilk 4 boşluğu olarak (devam etmek istediğim) 4 izleyen beyaz boşluk içerecektir. 'Esc' tuşuna bastığınızda imleç ara belleğin en soluna doğru kayar.

Sondaki beyaz boşluklardan (girinti olarak) oluşan bir çizgide, normal moda dönmek için 'esc' tuşuna bastığınızda imleç konumunu korumanın bir yolu var mı?


3
Herhangi bir platformda Vim'de bu davranışı hiç fark etmedim ... gVim'i şu şekilde başlatırsanız ne olur: gvim -u NONE -U NONE(cmd.exe'yi kullanabilir veya bir kısayol yapabilirsiniz)? Bu, (g) vimrc dosyalarınızın yüklenmesini önleyecektir.
Martin Tournoij

1
Bu tam bir vimrc dosyanız mı? İlk şüphem vimrc dosyanızdaki bir autocmd'nin sondaki boşlukları kaldırmasıdır. GVim'i herhangi bir vimrc dosyası olmadan başlattığınızda davranış değişiyor mu (yukarıdaki yoruma bakın)?
Martin Tournoij

Yukarıdaki benim tam .vimrc değil, başka ayarlar da var. .Vimrc (: scriptnames no .vimrc veya .gvimrc) göstermeden gVim çalıştırmak sorunumu çözer. Kesinlikle haklısın, .vimrc dosyama veya buna neden olabilecek kaynaklı başka bir şeye bakmam gerekiyor.
Jim

Görünüşe göre, yeni satırlardaki boşlukların ortadan kaldırılması arzu edilen bir davranış, burada okuduğumda dosyayı boşluktan temiz tutmak gerekiyor.
Jim

Bu yeni satırlar açmakla ilgili ... Bir dosyaya yazmakla ilgili değil mi?
Martin Tournoij

Yanıtlar:


11

Autoindent'in belgelerine bakmanın, neden ve nasıl çalışılacağı konusunda bir cevabı var. :help 'autoindent':

Yeni bir satır başlatırken geçerli satırdan girinti kopyala ( <CR> Ekle modunda yazarken veya "o" veya "O" komutunu kullanırken). Eğer hariç yeni bir satıra şey yazmazsanız <BS>ya CTRL-Dve sonra yazın <Esc>, CTRL-Oya da <CR>girinti yeniden silinir. 'I' bayrağı 'cpoptions'a dahil edilmedikçe imleci başka bir satıra taşımak da aynı etkiye sahiptir.

Başka bir deyişle, girintiyi kaybetmemesini istiyorsanız, bir şey yazın ve vurmadan önce geri boşluk bırakın Escve önde gelen alan kalır.

Alternatif olarak, ekleme moduna geri döndüğünüzde ve girerken de tekrar girinti düzeyinde olmak istiyorsanız , (zaten boş) satırı temizleyecek ve uygun girinti düzeyinde başlayacak yerine 'cindent'kullanın . Bu, yukarıdaki gibi genel bir çözüm değildir, ancak C kodu yazarken bunu tercih ederim, böylece dosyalarım aslında yalnızca boşluk içeren satırlarla kaydedilmez.Shift-Si


Bu, orijinal belgelerden soruma kesin bir cevap. Özet ve anlatım için teşekkürler - Bu bilgileri düşünmek için düşünmemiştim: h autoindent. Ayrıca, bir çözüme götüren tartışma için @Carpetsmoker'a da teşekkür ederiz.
Jim

Bu, ekleme modundan ayrılmak için değil, girintiyi korumak için o ve O'yu yeniden eşleştirmeyle ilgili bir sorunu çözdü. Bu nnoremap o o <BS><Esc><DEL>, vennoremap O O <BS><Esc><DEL>
Max Coplan

Çok teşekkürler!
Max Coplan
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.