web-dev-qa-db-ja.com

カーソルの形状(または色)を変更して、bashでviモードを示す

明確にするために:端末内でvimを使用するときにカーソルを 変更する方法 を尋ねていません。 Bashのviモードで入力モードとコマンドモードを切り替えるときにカーソルを変更したい:

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

zshでモード変更時にカーソルの色を変更できるようにする スクリプト を見つけましたが、この1つの機能だけのためにシェルを変更したくない。

Bashコマンドラインでコマンドモードと挿入モードを切り替えるときに、カーソルをgvimのように(または色だけで)変更する方法はありますか?

31
joecan

次の2行を〜/ .inputrcに追加します。

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

ここからコピー- コマンドライン編集vimスタイル

bash 4.3で利用可能- changelog を参照-

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

bash 4.3は現在rcの段階にあります。メインのリポジトリではなく、ソースからコンパイルしなくても、ほとんどのディストリビューションのパッケージを取得できるはずです。例えば。 Ubuntu(AMD64) here およびDebian(実験的リポジトリ) here

4
Graeme

私は本当の解決策を見つけていませんが、おそらくこれはあなた(または他の誰か)がより良い解決策を見つけるのに役立つでしょう。

スクリプトを作成する必要があります(例: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

それをPS1に追加した後、次のようになります:

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

しかし、私が言ったように、それはあなたが望むものではありません、それはcrの後でのみカーソルの色を変えるためです。幸運を

gB

2
gogolb

(カーソルを動的に変更する)正確ではありませんが、bash 4.4/readline 7.0 プロンプトを動的に変更するためのサポートが追加されます 。挿入/コマンドモードのカスタムモードインジケーターを指定できます(これは、show-mode-in-Promptおよび+を使用するようにハードコードされている現在の:オプションとは異なります)。

残念ながら、これらのバージョンは現在ベータ版であり、すべてのバグがまだ解決されていないようです。また、プロンプトのどこにモードインジケーターを表示するかを指定する機能もありません。

暫定的に、この機能を備えた github にパッチを当てたバージョンのbash 4.3/readline 6.3を公開しました。

1
Dylan Cali

Readlineをハッキングする方法があるかもしれません。おそらく私たちはそれを主流化するためにプッシュできますか?

SO https://stackoverflow.com/a/12201092/255961 についての私の答えは次のとおりです。詳細が得られたら更新します。

1
studgeek

GvimからConsole Vimに移行するときに、しばらく前に同じ質問をしました AskUbunt

私は 1つの回答 を受け取りましたが、それはgnome端末設定の切り替えと、これらの設定が端末全体に適用されることを含みました。したがって、gnome端末カーソルが時々間違った状態でスタックする可能性がありました。

私はまだあなたが満足のいく解決策を得るかどうかに興味がありますが、時間が経つにつれカーソルのモード状態情報がないことに適応しました。おそらく、私はより頻繁にエスケープを押すだけです(たとえば、escでコマンドモードであることを確認するにはesc iで挿入モードであることを確認します)。おそらく、画面の下部に表示されている状態を見ます。たぶん私はモードを内部化しました。

0
Jeromy Anglim