Set -o vi kullanmanın avantajları


55

Seçeneği vi'ye ayarlamak için bu komutu kullanan birçok geliştirici gördüm. Bunun gerçek kullanımını hiç anlamadım mı?

Bash komutlarını kullanırken, vi'ye geçmenin yardımı nedir?

Yanıtlar:


58

Readline düzenlemenizi emacs (varsayılan) veya vi ( set -o vi) olarak ayarlayarak, düzenleme komutlarınızı, kabuk ve seçim editörü 1'de standartlaştırıyorsunuz .

Böylece, kabuktaki bir komutu düzenlemek istiyorsanız , metin düzenleyicinizde olsaydınız yaptığınız komutların aynısını kullanırsınız 2 . Bu, yalnızca bir komut sözdizimini hatırlamak zorunda olduğunuz anlamına gelir ve (eğer yeterince avantaj olmasaydı) muhtemelen her iki ortamda da düzenlemenizi daha hızlı ve daha az hataya meyilli yapar ...

Bu ilişkiyi vi-modda, kabuk geçmişinizden herhangi bir komutu çekerek, Escapekomut moduna girmek için vurup ardından vurarak vaçabilirsiniz; bu, $ EDITOR'unuzu vim'in tam gücü ile daha karmaşık düzenleme için yüklenen komutla açar. Komutu sizin memnuniyetinize göre düzenlemeyi bitirdikten sonra komut :wqkabuğunuzda tekrar çalıştırılır.


1. Elbette, editörünüz olarak Emacs veya Vi / m kullandığınızı varsayar.
2. Veya daha doğrusu, bunların bir alt kümesi ...


1
Kutsal kâseyi aldım:) ....
Sathyam

3
Esc-v numarası, set -o viçoğu insanın bilmediği en iyi özelliklerden biridir . Bu özellikle, aynı komutu farklı argümanlarla birden fazla kez (çoklu komut satırı komutları gibi) vermek istiyorsanız geçerlidir.
Michael Goldshteyn

2
Esc-v numarası gerçekten kendine özgü bir avantaj değil set -o vi. Varsayılan set -o EMACSCx ayarının altında Ce, $EDITORçalıştırmadan önce komutu düzenleyebileceğiniz bir emacs penceresi (veya ayarlandıysa) açacaktır .
John Gowers

8

Vi modu, Android için ConnectBot gibi bir mobil SSH istemcisi kullanıyorsanız, büyük bir kullanılabilirlik gelişimidir.

Bunun sebebi değiştirici tuşlara olan güvenin azalmasıdır.

Vim, bir akıllı telefon veya tablette sanal bir klavyeyle kullanmak için Android kullanıcı arayüzünde yerleşik yerel düzenleme yöntemleri de dahil olmak üzere her şeyden çok daha kolaydır. İronik olarak, bir SSH oturumunda Vim ile C kaynaklarını düzenlemek, bunun için platformun kendi düzenleme widget'ına sahip bir anlık mesajı düzenlemek yerine, söylemek daha kolaydır.

Shell vi modu da benzer bir fayda sağlar.


Telefon klavyemde vi modu olduğunu umuyordum. Bunun zaten varmış gibi olduğunu söylüyorsunuz. Telefonumda vi modunu nasıl alabilirim?
meh

6

Vi modlarını ve işlemlerini kullanarak komut satırındaki öğeleri düzenlemenizi sağlar.

Bir örnek daha net olmasına yardımcı olacaktır:

Sen yaz cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

ancak bir hata alıyorum - Yazdığınız gerekirdi file1.txtdeğilfile1.xt

Without Bu seçenek ayarlandığında, sen yukarı ok tuşuna basın ve ardından sol oka basın ve almak kadar, 35 kez ... için tekrar izin .xtve sonra ekstra yazın t. Toplam tuş vuruşları: 37 .

Bu seçenek seti ile (örneğin) bir kez yukarı ok, sonra komut modu için Escape, 0 satırın başına gitmek için ve sonra /xt[return]almak xtve sonra iekleme modu için yazabilir ve eksik t yazabilirsiniz. Bu bazı açılardan delicesine karmaşık görünebilir, ancak bir vim kullanıcısıysanız bu komut zaten çok iyi bilinmektedir. Toplam tuş vuruşları: 9


1
Siz de birkaç Alt+Bsaniye veya bir Ctrl+Alt+] .Emacs modunda kullanabilirsiniz, bu yüzden bu bana güçlü bir örnek gibi görünmüyor.
Mikel

2
Biz golf konum olarak gören: Emacs modu: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi modu: Up, F, ., a, t, Enter= 7. :)
Mikel

@Mikel vi modunun Insert modunda başladığını, böylece sizde de öldüğünü unuttum Esc.
dragon788

5

Doğrudan bir avantaj olup olmadığından emin değilim. Ben oldum vi20 yıldan fazla kullanıcı. Ayrıca screendaha uzun süredir ve vianahtarları kullanan diğer programlarda da kullanıcıyım . Bash olarak "vi" modunu seçmem benim için doğal. Ancak işimdeki yüzlerce sunucu üzerinde çalışıyorum, çoğu varsayılan "emacs" moduna ayarlanmış. Bu yüzden iki modu da kullanmam gerekiyor. Ama bu gerçekten sadece bir tercih meselesidir.


Benim için benzer bir durum - çok fazla vim kullanıyorum ama her zaman varsayılan emacs benzeri okuma satırı tuşlarında (vi altkümesi kadar uygun olabilir) bir satır değiştirme eklemekten zahmetli olmak için daha az iş buldum Karşılaştığım her yeni sistemde vi moduna geçin.
jw013,

1
Yüzlerce sunucu üzerinde çalışmıyorum, ancak sshrc'yi bash kurulumumun farklı bilgisayarlar arasında benzer olmasını sağlamak sshiçin kullanıyorum. Elbette, yerel olarak bir makineyi kullanırken yardımcı olamayacağım bir şey değil .bashrc.
Kyle Strand,

4

En büyük avantaj, komut satırınızın mod düzenlenmesidir. Vim'e aşina iseniz ve felsefesini seviyorsanız, faydaların açık olması gerekir. Eğer tecrübeli iseniz, parmağınızın kas hafızası, bash komutlarınızı yıldırım hızlarında düzenlemenizi sağlayacaktır.

Not : Modsal düzenlemeyi sevmiyorsanız, yine de (varsayılan) emacs modundan yararlanmayı öğrenmelisiniz. İşte bazı şık klavye kısayolları ile herhangi süreci üzerinde çalışacak readlinegibi bash.


1

Eğer alışması halinde vi, böylece kabuk editörü olarak vi moduna ayarlayın. Bu bariz bir sebep olurdu. Diğeri zaman olduğu bashbazı işletim sistemleri (AIX, Solaris gibi çoğunlukla UNIX) varsayılan olarak mevcut değildir, bu nedenle kabuk geçmişi özelliği mevcut değildir, bu nedenle yolu için kabuk editörü ayarlayarak geçmiş komutları almak vive Esc, Ctrl+ Kveya Ctrl+L


1

Vim'in kısayollarını kullanarak komut satırında kolayca gezinmenizi ve düzenlemenizi sağlar, örneğin bir kelimeye doğru hızla gidin, bir kelimeyi silin.

Eğer çizginin sonuna gitmek gerektiğinde varsayılan kısayolları olarak, yapmanız gerekenler Ctrl+ eoysa set -o vi, sadece vurmak $vim gibi.


1

Muhtemelen partiye geç kaldım, ama benim için vi modunu kullanmak etkileşimli komut dosyaları oluştururken daha fazla…

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

Neyin karmaşık olabileceğine dair çok basit bir örnek .. kullanmak ESCkvsizi senaryoyu değiştirebileceğiniz bir vi oturumuna sokar ve sonra :wqçalıştırır.


1
Bu, bash vimodunu kullanmanın iyi bir örneği olabilir , ancak kötü bir bash kodu örneği. (1) Çıktıyı lsgirdi olarak başka bir işlemeye kullanmak kötü bir fikirdir. (2) $(…)Komut değiştirme için `…`sözdiziminin , sözdiziminden daha okunaklı olduğu kabul edilir . (3) Olmamak için iyi bir nedeniniz yoksa ve ne yaptığınızı bildiğinizden emin olmadığınız sürece, her zaman kabuk değişkenlerini belirtmelisiniz .
G-Man
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.