Bash vi modunu belirtmek için imleç şeklini (veya rengini) değiştirin


30

Netleştirmek için: Bir terminalde vim kullanırken imleci nasıl değiştireceğimi sormuyorum . Bash'in vi-mode'unda giriş ve komut modları arasında geçiş yaparken imlecin değişmesini istiyorum:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

Zsh'de imlecin rengini değiştirmeyi mod değişikliklerinde mümkün kılan bir komut dosyası buldum , ancak sadece bu özellik için kabukları değiştirmek istemiyorum.

Bash komut satırında komut ve ekleme modları arasında geçiş yaparken imlecin, gvim'deki gibi (hatta sadece renkli) şeklini değiştirmesinin bir yolu var mı?


Yanıtlar:


5

bu iki satırı ~ / .inputrc dosyasına ekleyin :

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2

4
Ne yaptıklarını açıklarsanız ve bazı bağlamlar sağlarsanız, bu ayarlar çok daha yararlı olacaktır, örneğin, ayarlar, kullanıcının belirli bir Readline sürümüne sahip olmasını gerektiriyor mu?
Anthony G - Monica


1
Bu sadece DECSCUSR'yi anlayan terminaller ve terminal emülatörleri üzerinde çalışacaktır.
JdeBP

Ben eklemek zorunda set show-mode-in-prompt oniçinde ~/.inputrcbu işi yapmak için de.
ronakg

4

Buradan kopyalandı - Komut satırı düzenleme vim stili

bash4.3'te mevcut olmalıdır - değişikliklere bakın -

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash4.3 şu anda rcaşamadadır, ana depolarda olmasa da, kaynaktan derleme yapmadan çoğu dağıtım için paketler alabilmelisiniz. Örneğin. Ubuntu (amd64) burada ve Debian (deneysel repo) burada .


Şunu unutmayın: yeni satır karakteri içeren özel bir PS1 kullanıyorsanız, bilgi istemi güncellenmeyecektir. burada
pgericson

@pgericson Bu bash 4.4.12 tarihinde benim için yeni bir satır içeren özel bir PS1 ile çalışıyor gibi görünüyor.
DuBistKomisch

2

Gerçek bir çözüm bulamadım, ama belki de bu daha iyi bir yol bulmana yardımcı olabilir.

Bir komut dosyası oluşturmanız gerekir (örneğin kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

ve PS1'inize ekledikten sonra, şöyle bir şey:

export PS1="\u@\h \$(kmtest.sh)> "

Ama dediğim gibi, istediğin bu değil, çünkü imlecin rengini sadece bir cr sonra değiştirir. İyi şanslar

gb


Bu aslında sizin için işe yaradı mı? Benim için işe yaramadı; sadece imleci kırmızı yaptı. İnsert ve komut modları arasında her geçişimde kmtest.sh dosyasının çalıştığını sanmıyorum. Sadece bilgi istemi oluşturma işleminde çalıştırılacak gibi görünüyor.
joecan


1

Tam olarak istediğiniz şey olmasa da (imleci dinamik olarak değiştirin), bash 4.4 / readline 7.0 istemi dinamik olarak değiştirmek için destek sağlayacaktır . Sen (bu o anda geçerli farklıdır ekleme / komut modları için özel modu göstergelerini belirlemek mümkün olacak show-mode-in-promptkodlanmış seçenek kullanmak +ve :).

Ne yazık ki bu sürümler şu anda beta aşamasındadır ve henüz tüm böcekleri gidermiştir. Ayrıca, mod göstergesinin neresinde gerçekleşmesini istediğinizi belirtme özelliğini de kaçırıyorlar.

Arada , bu işlevsellik ile github'da bash 4.3 / readline 6.3'ün yamalı versiyonlarını yayınladım .


0

Geri ederken aynı soruyu a sordu Ask Ubuntu ben GVIM dan Konsol Vim geçiş ne zaman.

Tek bir cevap aldım ancak gnome terminal ayarlarının değiştirilmesini ve bu ayarların terminaller arasında uygulanmasını sağladı. Böylece, gnome terminali imlecinin zaman zaman yanlış durumda kalması mümkün olmuştur.

Tatmin edici bir çözüm alıp alamayacağınıza hala ilgi duyuyorum, ancak zamanla imleçteki mod durum bilgisi eksikliğine göre ayar yaptım. Belki de sadece daha sık kaçışa basın (örneğin, esckomut modunda esc iolduğumdan emin olmak için; insert modunda olduğumdan emin olmak için); belki ekranın alt kısmında görüntülenen duruma bakarım; belki de sadece modu içselleştirdim.


3
Sadece sen, sensin soru şu netleştirmek için değil benimkiyle aynı. Konsoldaki Vim içindeki imleci nasıl değiştireceğinizi sordunuz. Bu Vim wiki'de çok iyi belgelenmiştir . Bash'in vi-modunda bunun nasıl yapıldığını bilmek istiyorum .
joecan
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.