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


30

明確にするために:端末内で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(または単に色)のように、カーソルの形状を変更する方法はありますか?


SOでのパテの同じ質問、答えはありませんtho :(- stackoverflow.com/questions/2393383/…–
studgeek

回答:


5

これらの2行を〜/ .inputrcに追加します。

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

4
この答えは、設定がユーザーに特定のバージョンのReadlineを必要とするなど、何を行うのかを説明し、コンテキストを提供する場合に非常に役立ちます。
アンソニーG-モニカの正義


1
これは、ターミナルおよびDECSCUSRを理解するターミナルエミュレータでのみ機能します。
JdeBP

この作業を行うためset show-mode-in-prompt on~/.inputrcも追加する必要がありました。
ロナック

4

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

bash4.3 で利用可能になります-変更ログを参照-

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は現在このrc段階にあり、メインリポジトリではなく、ソースからコンパイルせずにほとんどのディストリビューションのパッケージを取得できるはずです。例えば。Ubuntu(amd64)はこちら、Debian(実験リポジトリ)はこちら


注:改行文字を含むカスタムPS1を使用する場合、プロンプトは更新されません。ここで
-pgericson

@pgericson bash 4.4.12の改行を含むカスタムPS1で動作するようです。
-DuBistKomisch

2

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

スクリプト(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


これは実際にあなたのために働きましたか?私にはうまくいきませんでした。カーソルが赤になりました。挿入モードとコマンドモードを切り替えるたびにkmtest.shが実行されるとは思わない。プロンプトの作成時にのみ実行されるようです。
joecan


1

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

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

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


0

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

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

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


3
明確にするために、質問は私の質問と同じではありません。コンソールのVim内でカーソルを変更する方法を尋ねました。これは、Vim wikiに詳しく記載されていますBashのviモードでこれを行う方法を知りたいです
-joecan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.