Bash ile vi modunu (set -o vi) kullanırken, şu anda bulunduğunuz moda (ekleme veya komut) bağlı olan bir komut isteminin olması güzel olurdu. Bu düzenleme modu nasıl bulunur?
Btw, bu ZSH'de mümkün görünüyor :
Bash ile vi modunu (set -o vi) kullanırken, şu anda bulunduğunuz moda (ekleme veya komut) bağlı olan bir komut isteminin olması güzel olurdu. Bu düzenleme modu nasıl bulunur?
Btw, bu ZSH'de mümkün görünüyor :
Yanıtlar:
Taze bash 4.3 ve okuma satırı 6.3'te sizin için bir şeyler var .. değişim günlüğünden:
4. New Features in Readline
j. New user-settable variable, show-mode-in-prompt, adds a characters to the
beginning of the prompt indicating the current editing mode.
Yani koymak
set show-mode-in-prompt on
içine / etc / inputrc veya ~ / .inputrc (thx stooj), readline özellikli tüm programlarınızı etkilemelidir;)
Bash 4.4 / Readline 7.0 , kullanıcı tarafından ayarlanabilen mod dizeleri için destek ekleyecek .
Beta sürümlerini deneyebilirsiniz, ancak şu anda biraz hatalı görünüyorlar. Ayrıca, mod göstergesinin istemde nerede oluşmasını istediğinizi belirtmeyi henüz desteklemiyorlar (ki bence bu katil özelliktir).
Beklemek istemiyor ve küçük bir derlemeden korkmuyorsanız, bu işlevi destekleyen bash 4.3 ve readline 6.3'ün yamalı sürümlerini github'a yayınladım.
Yamalı sürümlerle aşağıdaki gibi şeyler yapabilirsiniz:
Nasıl kurulacağı da dahil olmak üzere daha fazla ayrıntı https://github.com/calid/bash adresinde mevcuttur.
Google'da arama yaptıktan sonra, bash man sayfasına ve ardından bash kaynak koduna (lib / readline / vi_mode.c) baktıktan sonra, ekleme modundan komut moduna geçerken istemi değiştirmenin kolay bir yolu yok gibi görünüyor. Görünüşe göre, kaynaktaki modları başlatma ve durdurma çağrıları olsa da, burada birinin bash kaynağına yama yapması için bir fırsat olabilir.
Gönderinizi gördükten sonra bash vi modu ayarıyla ilgilenmemi sağladı. Vi'yi seviyorum ve neden komut satırında olmasın. Bununla birlikte, hızlı bir değişiklik yapmadan ekleme modunda olup olmadığımızı takip etmemiz gerekecek gibi görünüyor (bu nedenle, birçok forum gönderisini söyleyin) Ne olursa olsun, ESC'ye basmadığınız sürece her zaman ekleme modundasınız. Biraz kolaylaştırır, ancak her zaman o kadar sezgisel değildir.
Bunun nereye gittiğini görmekle ilgilendiğim için sorunuzu yanıtlıyorum.
.inputrc
İnputrc bir göstermek için bir seçenek vardır +
insert için ve :
ekleyerek, normal modda için set show-mode-in-prompt on
de ~/.inputrc
eMPee584 yazdığı gibi, ancak bu istemi (bash ve taleb eski sürümleri ile) satırlı iyi çalışmaz.
Çözüm, tek bir satıra PS1
( >
) ve komut isteminden önce bir şeyi yankılayan bir işleve sahiptir. Bash'in içine yerleştirilir ve çağrılır PROMPT_COMMAND
.
function prompt {
PS1=' > '
echo -e "$(date +%R) $PWD"
}
PROMPT_COMMAND='prompt'
Normal komut dizeleri printf yankısında kullanılamaz. -e
İnterprete renk kodlarına olduğunu ve eklemek gerekli değildir \[
ya \]
zaten çalışmıyor, hangi.
Ekleme modu:
20:57 /home/sshbio/dotfiles/bash
+ > _
Normal mod:
20:57 /home/sshbio/dotfiles/bash
: > _
Sekmeye basıldığında , yalnızca PS1 tekrarlanıyor, bu benim için mantıklı:
20:57 /home/sshbio/dotfiles/bash
+ > ls _
bashrc bash_profile inputrc
+ > ls _
İçinde sahip olduğum şey bu ~/.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2
Ekleme modu mavi renktedir.
└──[ins]
Komut modu sarı renklidir.
└──[cmd]
Dezavantajı, bir tty
anlamı göstermemesi, yalnızca bir terminal öykünücüsünde yalnızca renkleri çalıştırmasıdır.
BASH vi modu için de bir gösterge almaya çalışıyorum ve hepiniz bunun kulağa basit geldiğini ve henüz yapmanın bir yolu olmadığını öğrendiniz.
Şu anki yaklaşımım: Hangi modun olduğundan emin olmadığımda 'a' tuşuna basın. BASH PROMOT'tan sonra 'a' görünürse, 'INSERT' modunda olduğumu öğrenirim. SONRA, 'GERİ DÖN'e basıp devam ediyorum. Bu benim için küçük sıkıntıyı çözmenin kolay bir yolu.
Bu arada, ben "a =" cal "takma adını veya boş isabet" biraz "kullanışlılık verecek başka bir şey.
Bu resim gibi çok satırlı komut istemi için
buradaki işim böyle
benim bash istemim
export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "
.inputrc
set show-mode-in-prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"
umarım bu sana yardımcı olmuştur
.inputrc
Öncelikle şunlardan daha yüksek bir bash sürümü çalıştırdığınızdan emin olmalısınız 4.3
:
$ bash --version
GNU bash, version 4.4
Ardından aşağıdaki satırları sayfanıza ekleyin ~/.inputrc
:
#################### VIM ####################
# FOR MORE INFORMATION CHECK:
# https://wiki.archlinux.org/index.php/Readline
# TURN ON VIM (E.G. FOR READLINE)
set editing-mode vi
# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)
set show-mode-in-prompt on
# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE
# FOR THE NUMBER AFTER `\e[`:
# 0: blinking block
# 1: blinking block (default)
# 2: steady block
# 3: blinking underline
# 4: steady underline
# 5: blinking bar (xterm)
# 6: steady bar (xterm)
set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2
Komut modunda, imleç blok olarak görüntülenir.
Ekleme modunda, imleç dikey çubuk olarak görüntülenir.
Daha sonra, moda bağlı olarak komut istemi şu şekilde görünecektir:
(cmd)$ ...
(ins)$ ...