Ex modun pratik bir kullanımı var mı?


115

Vim, girilerek girilebilen bir Ex moduna ve girilebilen Qbir komut satırı moduna sahiptir q:. Yeni vim kullanıcıları arasında yaygın bir şikayet, vim'i bırakmaya çalışırken yanlışlıkla bu modlara girmeleridir. Dolayısıyla, ~/.vimrckendime yanlışlıkla vurmamı engellemek için (özellikle de q:) bu anahtarları devre dışı bırakıyorum :

map q: <Nop>
nnoremap Q <nop>

Her ne kadar Ex'in vim belgelerini okudum, orta derecede tecrübeli bir Vim kullanıcısıyım ve arkasındaki temel fikri anlıyorum, ancak günlük vim kullanımımda herhangi bir kullanım bulmak için mücadele ediyorum. Genelde :, değişiklikler doğrudan eko edilmediği için, önceden eklenmiş standart bir vim komut satırı komutu girmekten daha az kullanışlı görünüyor .

Ex'in modern Vim'de günlük kullanımda bir etkisi var mı? Ex modunda yapmak için standart komutlardan daha kolay bir şey var mı? Komut satırı modu ile ex mod arasındaki fark nedir?


13
Qve q:oldukça farklı. Sadece Qsağdan mı bahsediyorsun ?
jamessan 19

@ jamessan, aslında, emin değildim ... haklısın, temelde aynı olduklarını varsaymış olmama rağmen, farklı şeyler yapıyor gibi görünüyorlar. Bu soruyu cevaplarsanız, açıkça kafam karıştığı gibi orada netleşmeye yardımcı olabilir.
Andrew Ferrier

Bu soru Meta'da tartışılıyor .
200_success

1
@AndrewFerrier q:Özel olarak sordunuz ve iki anahtar sekans arasında en fazla sorun yaşadığınızdan bahsettiniz. Ve buradaki cevapların ikisi, doğru terim ile onu arayan insanlar için yararlı olabilir.
Random832

4
Ne yaptığınızı q/ve ne yaptığınızı öğrendiğinizde q:, muhtemelen onları Vim'deki en yararlı komutlardan bazıları olarak göreceksiniz. Ve evet, zaten onları nasıl kullanacağınızı biliyorsunuz, henüz ne yaptıklarını bilmiyorsunuz. Bunu öğrenmek için bu senaryoyu izleyin .
Sato Katsura

Yanıtlar:


81

Q, bulduğunuz gibi, eski mod. Etkileşimsel olarak kullanmak tamamen yararlı değildir, ancak Vim eski exikiliyi taklit etmek için kullanılabildiğinden mevcuttur . Aslında, birçok sistem exkomutu basitçe eşleştirerek sağlar vim.

q:, veya :<C-f>bunun yerine komut satırı geçmişinize göz atmak ve normal bir tampon gibi düzenlemek için bir yol sağlar. Bu, koştuğunuz bir komutu bulmayı, normal Vim komutlarıyla düzenlemeyi ve ardından modifiye edilmiş komutu çalıştırmayı kolaylaştırır. q/Ve q?komutlar arama geçmişi için aynı işlevselliği sağlamak için vardır.


64

Ex modundaki Vim şu durumlarda faydalıdır:

  • Etkileşimli (çoklu) dosyaları etkileşimli olarak (betiğin bir parçası olarak) düzenlemeniz gerekir.
  • Bağlantınız çok yavaş veya işlemlerinizden sonra ekran güncellenmiyor.
  • Eşlemeler ve kısaltmalar devre dışı bırakıldı.
  • Gibi ortak anahtarlar Escapeveya Controldüzgün çalışmıyor.

Temel violarak görsel mod exbu yüzden Vim Ex Mode sadece benziyor ex(hala aynı kodu çalıştırıyorlar), bu yüzden exvi ve tersi içinden komut moduna geçmek mümkün . Aslında iki mod vardır: Ex mod ( vim -e) ve vi uyumlu Ex moddan ( vim -E) daha gelişmiş komutlar sağlayan gelişmiş Ex mod . Bakınız: Ex modu ile gelişmiş Ex modu arasındaki fark nedir?

Ör editörler bir ailenin köküdür: edit, exve vi. Ex, bir süper kümedir edve en kayda değer uzantısı bir ekran düzenleme tesisidir. ex (1)

Düzenleme en yaygın kullanımı ve benzeri olarak bir şekilde kullanan insanlar olmayan etkileşimli dosyaları olduğu sedve awkbununla birlikte daha akışı yönlendirilmiş ediyoruz, - onlar sadece başından sonuna kadar ileri dosyayı okumak (bunlar birden fazla satır ile çalışmak üzere tasarlanmış değiliz ) vimarabellek odaklı iken - dosyada istediğiniz gibi güçlü kılan ileri ve geri hareket edebilirsiniz.

Temelde:

sedBir S düzenleyici ED itor , bir dosya editörü değil.

Bununla birlikte, insanlar dosyaları düzenlemeye çalıştığı için kötüye kullanıyor gibi görünüyor ve gerçek şu ki dosyaları düzenlemiyor. İkincisi, yerinde ( -i) gibi seçenekleri standart olmayan FreeBSD uzantılarıdır ve diğer işletim sistemlerinde bulunmayabilir. Bu nedenle, taşınabilir kodlardan, G / Ç ek yükü ve kötü yan etkilerden (sembolik simgeleri yok etmek gibi) kaçınmak istiyorsanız ex, standart UNIX komut tabanlı editörü (birlikte ed) BashFAQ olan kullanmanız gerekir .


Ex modunda faydalı bulduğum diğer şeyler python, arka arkaya birçok komutu çalıştırabileceğiniz, düzenli ifadeleri çalıştıran / hata ayıklayan, vim konfigürasyonunu kontrol eden, harici komutları çalıştıran veya kayıtları çalıştıran vb. .

Örneğin:

let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg

Ex modunda normal moddan daha kolaydır (yalnızca son komutunuzu görebilirsiniz).


Pratik kullanımlar

Aşağıdaki takma adları benim var .bash_aliases:

alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"

Not: Kullanarak bufdodeğil exPOSIX uyumlu yöntem (uyarınca kılavuzun ), bu yüzden o zaman bunu kullanarak düşünebilirsiniz findyerine. !(Aksi oluşturulur uyarı) kaydetmeden tamponlar geçiş zorlamak için kullanılır.

İlki, tüm kaynak dosyalarımdaki boşlukları kırpmak için kullanıyorum, örneğin:

trim **/*.php

İkincisi, tüm sekmeleri boşluklara (tekrarlı olarak) dönüştürür , örneğin:

retab **/*.php

Benim için kullanmak retabyeterli, ancak burada açıklanan bazı olumsuzluklar var . -VAyrıntılı verbilite çıktısı için ekstra ekleyin .

Yukarıdaki örneklerin zsh / bash4 globbing ( **) yöntemini kullandığına dikkat edin , bu nedenle kabuğunuzun desteklediğinden ve etkin olduğundan emin olun.

Daha pratik örnekler için (html dosyalarını ayrıştırma gibi) kontrol edin:

Ayrıca Ex-mode hakkında daha fazla bilgi için:


Eğer elde etmek kolaydır operasyon "düzenleme (çoklu) olmayan etkileşimli dosyaları" bir örnek gönderebilir misiniz exonunla olandan ed, sedya awk?
Sato Katsura

1
@SatoKatsura Birden fazla dosyayla ilgilenen iki pratik kullanım eklendi.
kenorb

exModu daha iyi kavramak için belgeleri araştırıyorum . Eğer bir patlama (varsa neden alamadım !sizin de) trimtakma bufdokomutu. Bu, sonuncusu dışındaki tüm dosyalardaki tüm değişiklikleri bırakmaz mı? Değilse neden olmasın?
Wildcard

@Wildcard !Temelde çalışmaz, arabellek değiştirildiğinde her zaman exkaydedilmemiş değişikliklerden şikayet eder (ve en sonunda değişiklikleri kaydederiz xa). Uyarı devre dışı bırakılabilir, ancak eklenmesi çok daha kolaydır !.
kenorb

Anladım ... Sanırım belgeleri yanlış okuyorum; o belirtir olmadan! tampon terk edilemez eğer komut başarısız olur, ancak açıkça belirtmek gelmez !tampon neden olacak değil Yani, "düştü anlamına bu durumda "terk edilmiş" yok .... atılacak , çünkü diske yazılmayan hiçbir şey içermiyor "? Ya da ne? (Bakıyorum :help bufdo)
Wildcard

18

Nadiren eski kip kullanırım, ancak gerektiğinde mevcut olduğu için minnettarım.

Bazen sistemlere VPN üzerinden ssh ile erişiyorum ve bu bağlantılar bazen yavaşlayabilir. Sorunu daha da kötüleştirerek, bazen uzaktaki bir dosyayı ssh ve VPN'nin arkasında olmanın yanı sıra, yavaş seri bağlantı üzerinden (yani, 9600 baud artı çok fazla ağ gecikmesi) biten bir dosya düzenlemeliyim.

Bunun gibi zamanlar, görsel geri bildirim ve ekran güncellemelerine sahip olmanın daha fazla bir sıkıntı haline gelmesidir, çünkü gördüklerim gecikir (etki, bir mikrofona konuşmaya benzer, ancak bir spor stadyumunda olduğu gibi konuşmacılar çok uzaktır. ve bazen gecikmiş geribildirim nedeniyle karışık.

Bu durumda, değişikliklerin geri çevrilmemesi yararlı bir avantajdır, çünkü ekranın güncellenmesini beklemiyorken daha az zamanda daha fazlasını yapabiliyorum.

Düzenlemeleri tamamladığımda, çalışmamı gözden geçirmek için bir kerelik ekran güncellemesi için görsel moda geri dönüyorum. Sonra eski moda geri dönebilir ya da saklayabilirim çünkü işim bitti.


13

Komut satırı penceresi uzun ve karmaşık komutları yazmak için kullanışlıdır. Komut geçmişi bir pencere olarak açıldığından, herhangi bir vim navigasyon veya düzenleme komutunu / eşlemeyi kullanabilirsiniz.

Bir kez koştuğunuz, ancak bir hata yapmış olduğunuz uzun bir ikame komutunu düzenlemek istediğinizi varsayalım:

:%165,177s:here is a whole bunch of text I wnat to replace:here is the replacement:c

Arama dizesini değiştirmek için, bgezinmek için Ex satırındaki gibi vim hareketlerini kullanamazsınız (bu gezinti için anahtar eşlemeler olduğuna inanıyorum). Bunun yerine, çoğu insan sol ok tuşuna birkaç kez basardı.

Daha iyi bir yol: q:Komut satırı penceresine kgitmek, en son komuta gitmek için basın ve değiştirmek istediğiniz komutun bir bölümüne normal hareketlerle gidin. Tüm sözcüğü, hiçbir problem değiştirmek istiyorum: ciw.


Tamam teşekkürler. Emin misiniz q: olduğunu Ex komut satırı? Yardım, yalnızca getirdiği mod için "Ex" ibaresini kullanır Q, ancak bu, başvurduğunuz standart vim düzenlemeyi desteklemez - yalnızca q:yardım, "Komut satırı modu" olarak adlandırır. İlk önce ikisini karıştırdığımı biliyorum, ama muhtemelen buradaki ayrımdan emin olduğumuzdan emin olmalıyız.
Andrew Ferrier

1
Aradım :help q:Ben o cümleyi kullanmaya karar vermeden önce, ama terminoloji hakkında karışık olabilir.
bsmith89

1
Bu terminoloji hakkında da kafam karıştı. Genelde bir Ex komutunu aşağıdaki gibi yazmaktan bahsederim :ama yanlış kullanıyor olabilirim.
bsmith89

3
Cevabınızın içeriği tamamen doğru, ancak terminolojiyi kullanma şekliniz (benim için) biraz kafa karıştırıcı. Belgeleri biraz yanlış yorumladığını düşünüyorum. q:bir Ex komut satırı açmaz. Geçerli ve önceki Ex komutlarının düzenlenebildiği komut geçmişi penceresini açar . Ex komut satırı, :Normal modda bastığınızda ne elde ettiğinizdir .
Zengin

3
FWIW Vim belgelerinin de biraz karıştığını düşünüyorum, yerlerde olduğu :gibi 'Ex' komutları olarak tüm komutları ifade ediyor . IMHO gerçekten yalnızca Ex'te gerçekten mevcut olan komutların Ex komutları olarak kabul edilmelidir.
Zengin

6

Bana kısmi görüşlü bir kişiden eski durumuna geçmekte kör olduğu söylendi, bu yüzden bu bir kullanım. Ben kendimden çok daha yaşlıyım ve uzun zaman önce ed'den eskiden eski durumuna geçtim (evet, "standart editör" ed olduğunu biliyorum). Vi modunda yaptığım tek şey Lisp kodu yazarken parens ile eşleşmek için%-sıçraması.


Bana bu röportajı hatırlatıyor . exÖzellikle de olsa söz edilip edilmediğini hatırlamıyorum .
Martin Tournoij

Mükemmel içgörü, bunu asla düşünmezdim. Çok teşekkürler, harika cevap.
Andrew Ferrier

2

Burada daha önce bahsedilen kullanımların yanı sıra, eski S / 390 platformundaysa ve konsol ekran yönelimli yerine satır odaklı olacaksa, linux konsolundaki dosyaları düzenlemenin bir yoludur.


0

Ex modun pratik bir kullanımı var mı?

Muhtemelen değil. Bununla birlikte, Ex moduna girmek gerçekten kullanışlı değilken, Ex komutlarını öğrenmek hala yararlıdır, çünkü özellikle eşleşen satırlarda çalışmak için :g/genel komutlarla birlikte ex exe komutları kullanırsınız .


-1

Orijinal "ex", Unix'deki "ed" metin düzenleyicisinin yükseltilmiş versiyonuydu. 2BSD'de görsel bir mod eklendi ve yeni editör "vi" olarak adlandırıldı.

Birisi ex komut satırını kullanmak isterse, ":" tuşuyla komut moduna geçecektir. Bu yüzden benim en iyi anladığım kadarıyla eski nostalji için orada değil, komut modunu sağlayan kısım.

Ayrıca ekleme moduna girerek

 :i 

sonra "yazıp metninizi yazın. ^ c ile çıkın. Veya hepsini bir komut satırına yazın

 :i my multiline text \with a second line.^c

1
Ex-mode'un Command line-mode ile aynı olmadığı göz önüne alındığında , bu sorunun cevabını vermiyor gibi görünüyor. Ek bir not olarak: komut modu , Normal mod için talihsiz bir eşanlamlısıdır, komut satırı modu değil.
8,

"Komut modu" noktası alındı. Sadece mazeret, vi olarak değiştirdiğimizde, yeni ilaveyi "komut" un aksine "görsel" (şimdiki vim görsel mod değil) olarak aldık. Öte yandan komut satırı, do_cmdline () işlevini aynı şekilde çağırıyor gibi görünüyor. Kabul ediyorum herhangi bir "pratik kullanım" önerdiğini değil.
if2
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.