Ne yapar: open in vim?


18

Vim'in belgelerinde :openkomut hakkında söylenecek şeyler var :

This command is in Vi, but Vim only simulates it:

                                                        *:o* *:op* *:open*
:[range]o[pen]                      Works like |:visual|: end Ex mode.
                                {Vi: start editing in open mode}

:[range]o[pen] /pattern/    As above, additionally move the cursor to the
                                column where "pattern" matches in the cursor
                                line.

Vim does not support open mode, since it's not really useful.  For those
situations where ":open" would start open mode Vim will leave Ex mode, which
allows executing the same commands, but updates the whole screen instead of
only one line.

"Simülasyon" un doğası ve bunun neden farklı davranışlara sahip gerçek bir komuttan ziyade bir simülasyon olarak değerlendirildiği hakkında yorum yapmıyor. Ex modundan (Q) çalıştırıldığında, aslında tarif edildiği gibi davranır.

Ancak, farklı bir açık komut da var gibi görünüyor. Normal komut satırından veya farklı bağımsız değişkenlere sahip ex modundan çalıştırıldığında, eşanlamlı gibi görünür:edit . Komut modundan çalıştırdığınızda ile bir /pattern/, bu imleci konumlandırır ve görünüşe göre çalışır :editAyrıca olarak çalıştırılabilir: (düzenleme başarısız imleç pozisyonu yalnızca belirgin olmak.) :open /pattern/ fileİmleci ve ishal konumlandırdığı,:edit file

Sorum şu: Bu neden belgelenmiyor? Fark :editetmediğim bir fark var mı? Bir :openzamanlar eşanlamlı mıydı :editve ancak daha sonra POSIX ile yarıya inme girişiminde değişti mi?

Yanıtlar:


13

Vi'nin "açık modu", basılı kopya terminalleri gibi tek bir hattı olan terminaller için kullanışlıdır. Açık modda, vi dosyanın "tek satır görünümü" vardı. İmleci hareket ettirmek tüm satırı yeniden çizer ve silinen karakterler farklı yazdırılır.

Vim'in yaptığı "simülasyon" komutu basitçe destekleyerek, (belgelerin söylediği gibi) gibi hareket etmesini sağlar :visualve :visual"aksi halde aynı" dır :edit, bu yüzden muhtemelen böyle davrandığını görürsünüz :edit.

Bir kaynak kodu bakış açısından, ( ) :openiçinde uygulanır . Düzenli bir ifade verildiği durumla başa çıkmak için bazı şeyler yapar, ancak her zaman bir çağrı ile biter .ex_docmd.cex_open()do_exedit()

Uygulanması :edit, :baddve :visualbulunan ex_edit()aynı dosyada fonksiyonu ve bu fonksiyonu bir olan direkt arama için do_exedit()(başka bir şey). Böylece, normal ifade parametresini kullanırken, aynı kod çağrılır. do_exedit()biraz tüylüdür ve davranışı, verilen gerçek komuta göre büyük ölçüde değiştirilir, ancak açık / düzenleme / görsel için komut belirteçlerini kesinlikle kontrol etmez. Böylece, üç komut aşağı yukarı aynı kodun çalışmasına neden olur do_exedit().


8

Gönderen An Introduction Vi ile Düzenleme Görüntülü :

Bir basılı kopya terminalinde veya alt satırdan hareket edebilen bir imleç bulunmayan bir terminaldeyseniz, vi komut kümesini yine de farklı bir modda kullanabilirsiniz. Bir vi komutu verdiğinizde, editör size açık modu kullandığını söyleyecektir. Bu ad, ex'e, aynı moda girmek için kullanılan open komutundan gelir.

Görsel mod ile açık mod arasındaki tek fark metnin görüntülenme şeklidir.

Açık modda, düzenleyici dosyaya tek bir satır penceresi kullanır ve dosyada ileri ve geri gitmek, her zaman geçerli satırın altında yeni satırların görüntülenmesine neden olur. Vi'nin iki komutu açıkta farklı çalışır: z ve ^ R. Z komutu parametreleri almaz, bunun yerine geçerli satırın etrafına bir bağlam penceresi çizer ve sizi geçerli satıra döndürür.

Basılı bir terminaldeyseniz, ^ R komutu geçerli satırı yeniden yazacaktır. Bu terminallerde, editör normalde geçerli satırı temsil etmek için iki satır kullanır. İlk satır, düzenlemeye başladığınızda satırın bir kopyasıdır ve bu satırın altındaki satırda çalışırsınız. Karakterleri sildiğinizde, editör size silinen karakterleri göstermek için bir dizi \ 'yazar. Editör ayrıca bu değişikliklerden hemen sonra geçerli satırı yeniden yazdırır, böylece satırın nasıl göründüğünü görebilirsiniz.

Bu modu bazen tam ekran modunda vi'yi destekleyebilen çok yavaş terminallerde kullanmak yararlı olabilir. Bunu ex girip bir açık komut kullanarak yapabilirsiniz.

:opengünümüzde tamamen işe yaramayan bir Vi klonu olarak Vim'in kökenidir. Sadece POSIX uyumluluğu için orada kaldığını varsayabilirim.

Belirsiz benzerliklere rağmen, :openbir değil bir alternatif :edithayal herhangi bir streç tarafından.

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.