UNIX’de kabuk komutlarını düzenlemek için VI tuşlarını kullanma


28

UNIX'te gerçekten iyi çalışan bir meslektaşım vardı.

Bana kabuk komutlarımı düzenlemek için Vi anahtar bağlarını nasıl kullanacağımı gösterdi.

Her giriş yaptığımda çalıştırılan bir dosyaya emri verdi.

O zamandan beri farklı bir projeye taşındım.

Maalesef bunu nasıl ayarlayacağımı hatırlamıyorum.

Terminalde komutları düzenlemek için Vi anahtar bağlamalarını nasıl kullanacağını bilen var mı?

Bu ayarı kalıcı hale nasıl getirebilirim?

Yanıtlar:


31

Bugüne kadarki en harika özellikten bahsediyorsun!

Bunu, .bashrcdosyaya ekleyerek kabuk komutlarını (ve komut geçmişini) düzenlemek için vi komutlarını kullanabilirsiniz :

set -o vi

Yalnızca geçerli oturumunuzu etkilemek için bu komutu komut satırından da çalıştırabilirsiniz.

Bash kullanmazsanız, kabuğunuz için uygun rc dosyasını kullanın.


Bu, herhangi bir komutu düzenlemek için vi komutlarını kullanmanıza izin verir ...

Ayrıca (geçmişe bastıktan sonra ) geçmişinizde ilerlemek için jve ktuşlarını da kullanabilirsiniz ESC.

Eski komutları aramak için /(vurduktan sonra ESC) da kullanabilirsiniz .

Başka bir deyişle, cpon dakika önce yaptığınız o süper uzun komutu bulmak için :

ESC/cpENTER

Sonra birlikte tarihinin tüm eşleşen komutları aracılığıyla döngüsü can nve N.

Bütün bunlar beni komut satırında 10 trilyon kat daha üretken yapıyor!


4
Aslında vi kullanmıyor, çizgi düzenleme için vi tarzı klavye komutları kullanıyor.

4
Tabi ... Sanırım uygun terminoloji vi bindings in the shellşimdiye kadar icat edilen en büyük özellik!
jahroy

Modu görüntülemenin bir yolu olsaydı, emacs bağlantılarından vi ciltlerine geçiş yapardım. Bunu yapmanın bir yolunu biliyor musun?
iconoclast

Onlar bağlamak için bir yol var jjile ESCbiz genellikle vim gibi?
steveyang

@yangchenyun - Belki bu soru şu konuda yardımcı olabilir: stackoverflow.com/questions/844862/… Komutların hiçbirini kişisel olarak bağlamıyorum / değiştirmiyorum, bu yüzden ne istediğinden emin değilim.
jahroy

12

Bash kullanıyorsanız, jahroy ve kötü otto zaten cevaplamış olduğu gibi, kullanabilirsiniz

set -o vi

bash'nin vi-style düzenleme komutlarını kullanmasına neden olmak için.

Bunu yaptıktan sonra Esc v, vi komut editörünü geçerli komut satırının bir kopyasını içeren geçici bir dosya ile başlatmak için yazabilirsiniz . Komutu düzenleyebilir, hatta birden çok satırla değiştirebilirsiniz; ( :wq) dosyasını kaydettiğinizde, kabuk düzenlenen komutları uygular.

Eğer tercih edersen

set -o emacs

Ctl-XCtl-Eaynı şeyi yapmak için kullanabilirsiniz . $EDITORMutlaka emacs değil , tercih ettiğiniz editörü kullanır .

(Şahsen, düzenlememin çoğu için vi (aslında vim) kullanıyorum, ancak set -o emacskabukta tercih ediyorum ; ekleme modunu değiştirmek ve değiştirmek, dosyaları düzenlemek için harika, ancak etkileşimli komutlar için garip.


Vi-tarzı kaçınarak normal düzenleme moduna geri dönmek için bir yol biliyor musunuz? Bl Num ile başarılı olduğumu hatırlıyorum, ama artık yok; Neyi kaçırıyorum?
piertoni

@piertoni: set -o emacsİstediğini yapmıyor mu ?
Keith Thompson

Evet, işe yarıyor, noktayı özledim, teşekkürler
piertoni

10

set -o viSatır düzenleme komutlarınızı @jahroy tarafından yayınlanan şekilde değiştirmek için kullanabilirsiniz fc, ancak önceki komutu bir düzenleyiciye (FCEDIT veya EDITOR'a koyacak) komutunu ( bash'da kullanılabilir sanırım ksh, ancak muhtemelen tcsh değil) düşünüyor olabilirsiniz. muhtemelen vi olarak ayarlamış olduğunuz)) ve editörden çıkarken komutu çalıştırır. Manpage veya help fcdetaylar için bakınız veya sadece deneyiniz.


5
alias r='fc -e -'önceki komutları yeniden çalıştırmak için değerli bir takma addır. fcKorn kabuğundan kaynaklandığına inanıyorum. Komutları numaraya göre belirleyebilirsiniz ( fc 123 129tarihteki 123 ila 129 arasındaki komut numaralarını düzenlemek için). Göreceli sayıları belirleyebilirsiniz ( fc -10 -1girilen son 10 komutu düzenlemek için). İle önceki komutları listeleyebilirsiniz fc -l. rTakma adı önek ile bir komut belirleyebilirsiniz ( r makeson çağrıyı başlatır make; son koştuğunuzdan beri r mbir mvkomut çalıştırmazsanız make, vb.).
Jonathan Leffler,

6

En son kullanılan komutu vim'de düzenlemek ve editör kaydedip çıktıktan sonra düzenlenen bir sürümü çağırmak için, fckabuk yerleşik komutunu kullanın . Herhangi bir argüman olmadan aşağıdakileri yapacaktır:

  1. Geçici bir dosya oluşturur /tmpve en son yazılan komutla doldurur
  2. Editör normal olarak çıktıktan sonra (çıkış kodu 0 ile) bu geçici dosyada bulunan komutu çalıştırır ve bu dosyayı kaldırır. Düzenlenen sürüm, her zamanki bir komut olarak tarihe kaydedilir (en azından zsh cinsinden). Eğer editör sıfırdan farklı bir kodla çıkarsa hiçbir şey çalıştırmaz (vim'de bu onu öldürerek veya kullanarak başarılabilir :cquit).

Komut hem bash hem de zsh olarak çalışır.


5

Aslında, bu aslında şimdiye kadarki en büyük özellik. Yine de daha var:

Adlı bir dosya oluşturun

.editrc

çizgiyi içeren

bind -v

Editline , readline benzeri hizmetler sağlayan BSD lisanslı bir versiyon kütüphanesidir. Bu .editrc, MySQL'in komut satırı kabuğundaki ya da readline kullanmayan herhangi bir uygulamadaki tuş bağlamalarınızı vi moduna ayarlayacaktır.

Yılların geçmesiyle biraz unutkanlık kazandım, bu yüzden .zshrc komut satırı üzerinde hangi modda olduğumu göstermek için vi modu için bazı paketleyiciler kullanıyor . Bu iyi.

Zsh yazabileceğini biliyorum

bindkey -L

ve anahtar kelimelerinin listesini alın. Eminim bash de buna benzer bir şeyler olmalı. Tüm vi tuşları varsayılan olarak bağlı değildir. Onları nasıl zinde görüyorsun ve yarışlara kapalısın.


Keşke bu 5 kez MySQL'deki vi ciltlemeler için puan kazansaydım!
jahroy

1

Terminalinize yazın export EDITOR=vi.

Bu ayarı kaydetmek için. bu satırı ~ / .profile dosyasına koyun


5
Bu, varsayılan editörünüzü (dikkat edilmesi gereken komutlar için $EDITOR) olarak ayarlar vi. Kabuk komutlarını ile düzenlemenize izin vermez vi(en azından doğrudan değil).
Keith Thompson,

2
@KeithThompson Zsh, varsa $EDITOR, vi düzenleme moduna geçer vi. Bunu yapan tek kabuk bence.
Gilles 'SO- kötülük yapmayı bırak'
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.