Daha iyi düzenleme özelliklerine sahip kabuk


11

Kabuklar (en azından bildiklerim) gerçekten kötü komut düzenleme yeteneklerine sahip.

Örneğin:

  • İmleci komutun herhangi bir noktasına gösteremiyorum.
  • Komuttaki metni seçip geri alamıyorum / silemiyorum / değiştiremiyorum.

Şu anda bunlar çok dikkat dağıtıcı, komutları terminale yapıştırmadan önce düzenlemek için gedit kullanıyorum.

Bunlar için iyi bir çözüm var mı?


3
Bir terminali bir kabukla karıştırıyorsunuz.
JdeBP

Yanıtlar:


13

Bash aslında bu konuda oldukça iyi. Sadece kısayollarını öğrenmeniz gerekiyor. Örneğin (varsayılan emacs modunda):

  • Ctrl+ A: satırın başına gider.
  • Ctrl+ E: satırın sonuna gider.
  • Ctrl+ B: bir karakter geriye gitme.
  • Ctrl+ F: bir karakter ileri git.
  • Alt+ B: bir kelimeyi geriye doğru taşır.
  • Alt+ F: bir kelime ileri git.
  • Ctrl+ K: satır sonuna kadar her şeyi sil (kes).
  • Alt+ D: imleçten sonraki sözcüğü siler (keser).
  • Ctrl+ W: imleçten önceki sözcüğü siler (keser).
  • Ctrl+ Y: tamponda ne var (yapıştırın) ( örneğin Ctrl+ Kveya Alt+ ile kestiğiniz D)

Ve daha fazlası var. man readlineBaşka neler bulunduğunu görmek için okuyun . Yerleştirerek farklı kısayollar atayabilirsiniz ~/.inputrc. Örneğin, Ctrl+ Leftbir kelime geri gitmek ve Ctrl+ Rightbir kelime ileri gitmek için şunu ekleyin ~/.inputrc:

"\e[1;5D": backward-word 
"\e[1;5C": forward-word

Bu garip kodların ne anlama geldiğini bulmak için Ctrl+ tuşuna Vve ardından kullanmak istediğiniz tuşa basın. Ctrl+ İle denerseniz Right, göreceksiniz ^[[1;5C. Değiştir ^[ile \ede ~/.inputrc.


Ayrıca diğer mermilere bakmak da isteyebilirsiniz. Popüler "modern", zengin özelliklere sahip mermiler şunları içerir:


İle bir kelime ileri ve geri gnome-terminalgitmek için ESCdüğmesini kullanmak ALTzorunda. . .. veya uygulama menüsü için Alt kullanmayan bir terminale geçin. . . xterm veya sakura gibi
Sergiy Kolodyazhnyy

@Sistemimde değil, teşekkürler. Bu şekilde ayarlayıp ayarlamadığınızı veya Ubuntu tarafından varsayılan olarak ayarlanmış olup olmadığını bilmiyorum. Esc genellikle Alt'ın eş anlamlısı olarak kullanılır.
terdon

Terminal arasında hiçbir arabellek kesimi yok.
Craig Hicks

7

Seçtiğiniz düzenleyiciye ayarlayarak EDITORve o anda düzenlenmekte olan satırı açan CTRL+ X+ Eveya CTRL+ X/ CTRL+ tuşlarına basarak boş veya kısmen yazılmış bir komutu istediğiniz düzenleyiciye düzenleyebilirsiniz ;EEDITOR

Örneğin, ayar EDITORiçin gedityapacak CTRL+ X+ Eve CTRL+ X/ CTRL+ EGedit mevcut hattını açın.

Bu kalıcı bir çözüm yapmak için ayarlayabileceğiniz EDITORiçinde ~/.bashrc.

Bu, komutu düzenlemek için tam geçişli bir grafik metin düzenleyicisinin bile kullanılmasına izin verir; düzenlenen komutu çalıştırmak için dokümanı kaydedip kapatın.


Aynı özellik Zsh'ta aşağıdakiler eklenerek etkinleştirilebilir ~/.zshrc:

autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line

2
fcFCEDIT değişkeni ayarlanmışsa , bu komutla da çağrılabilir . İyi cevap !
Sergiy Kolodyazhnyy

1
@Serg Thanks, ancak önceki komutu fcaçar (belirli bir şekilde daha da temizdir ). Bunu bilmiyordum, teşekkürler!
kos

6

Terminallerde metin düzenleme özelliği yoktur. Terminaller bir metin alanı sağlar ve klavyeyi bir şeye bağlar. Ancak terminalin içinde çalıştırdığınız bir şey , ne yapabileceğini belirler.

Kabuklar gibi bashgenellikle içinde bir terminalin çalışmasını bulacaksınız ilk şey vardır. Kabuklar komutlara göre çalıştığı için yalnızca geçerli komutu düzenleyebilirsiniz. , Bourne kabuğuna kıyasla mükemmel komut düzenleme sağlar ya cshda kshkısa bir hikayeyi bile düzenlemek istemediğiniz bir şey değildir.

Metin editörleri kabukta çağırabileceğiniz komutlardan biridir. Bunun en iyi örnekleri ve . vimya emacsda hemen hemen her şeyi düzenleme olanağı verir. Her ikisi de, yeteneklerini karşılaştığınız herhangi bir soruna genişletmek için yerleşik programlama ortamları içerir.

Dolayısıyla çözüm, bu araçların ne yaptığını daha iyi anlamak ve ne yapmak istediğini anlamak ve iş için doğru olanı seçmek .


Farkı biliyorum, ama bash'ın komut düzenlemesini geliştirmek için bir şey yapılabilir mi?
UniversallyUniqueID

1
bir senaryoya koymak?
civcivler

0

Genellikle terminaller fare ile metin seçimine izin verir, ancak kabuk bunun farkında değildir. Yani maalesef ne bash, zsh, fishne de esfare tabanlı düzenleme destekleyebilir. Bunu yapmayı düşünüyorum, terminal üzerinde daha fazla kontrol sahibi olmaları gerekecek.

Bununla birlikte , Vim veya GVim'i açar ve ardından kabuk komutlarını girerseniz: (ve bu biraz esnektir):

:!...

o zaman yapabilirsiniz doğrultusunda her yerde atlamak için farenizi tıklayın . ( :set mouse=aÖnceden etkinleştirilmemişse önce yapmanız gerekir .) Bu moddaki düzenleme tuşları:help cmdline-editing

Vim ayrıca, vurularak ulaşılabilen oldukça güçlü bir komut geçmişi moduna sahiptir q:. Oradan Vim'in normal mod komutlarını kullanarak sorabilir, silebilir ve yapıştırabilirsiniz. Bu modda, fareyle seç ve ardından istediğiniz özelliği (vurarak d) silebilirsiniz .

Burada önemli bir uyarı, Vim'in canlı bir kabuk seansını gerçekten çalıştırmamasıdır. Yürüttüğünüz her komut bir alt işlemde çalıştırılır. Bu nedenle, alt süreç tarafından ortam değişkenlerinde veya kabuk seçeneklerinde yapılan değişiklikler kaybolacaktır.

Yani ortam değişkenleri değiştirebilir, söz konusu olan Vim süreci ve Vim'ın komut satırından bu kullanabilir ve hatta çocuk süreçlere ihraç edilecek:

:let $FOO="bar"        " the $ and the quotes are mandatory here

:echo $FOO             " Vim's own echo command
bar

:!echo "$FOO"          " Passing the variable to a shell command
bar

:!bash                 " Opening a child shell
$ echo "$FOO"
bar

Eğer Vim aslında bir çeşit garip kabuk gibi davranmaya istekli iseniz, o zaman gelişmiş düzenleme özelliklerinin tadını çıkarabilirsiniz! Muhtemelen en büyük dezavantajı, her komutu :!veyaq:

Oh ve bu arada, kabuk komutunun çıktısını mevcut Vim tamponunuza almak istiyorsanız, bunu böyle yapabilirsiniz (ancak mevcut satırınızı tıkayacağına dikkat edin):

:,!ls
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.