7

ユーザーがどのモードにいるかを把握するための簡単な (または複雑な) 方法が必要です。ユーザーが通常、挿入、ビジュアル、置換、変更などの状態にあるかどうかを知る必要があります。

私はmode()関数を認識していますが、1文字ではなく完全な文字列を出力する方法がわかりません。

私の計画は、返される文字列に応じてステータスラインの背景色と前景色を動的に変更する関数を作成することでしたmode()。基本的に、私のためにそれを行う一連のifとelseifを備えた関数。ただし、このアプローチには欠陥があります。デフォルトでテーマがどの色に設定されているかわかりません。

したがって、基本的に、次のことを行う関数を作成する方法について、いくつかのヒント/ヘルプが必要です。

  • ユーザーがどのモードにいるかを認識します。残りの関数は、これが変更されるたびに異なる反応を示します。
  • 現在のテーマがそれらに設定したものを反映するいくつかの変数をfgと の値で設定します。bg
  • これらの値に応じて、ステータスラインの前景と背景を変更します。

やってみましたが、とても雑なやり方で、全然うまくいきませんでした。色を一度だけ設定した後、変更するたびに反応しませんでした。

ご協力いただきありがとうございます!:)

編集:

それがうまくいかない前に私が試したことはかなり確かです:

function! StatuslineModeColor()
    let s:StatuslineMode=mode()
    if s:StatuslineMode == 'n'
        hi Statusline ctermbg=blue guibg=blue
    elseif s:StatuslineMode == 'i'
        hi Statusline ctermbg=red guibg=red
    endif
endfunc

そして、ステータスラインに次のように入力しました:

let &stl.='%{StatuslineModeColor()}'

編集2:

基本的に、テーマが以前に使用していた色を取得する方法を見つける必要があることがわかりました。それは私がこの解決策を使用する場合です:http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5

ただし、このソリューションは私の基準では理想的ではありません。これは、クリーンではないか、多くの混乱を引き起こしているため、可能な限りクリーンではないためです。:/

4

1 に答える 1

2

2016 年 10 月の更新: それ以来、私のドットファイルはhttps://gitlab.com/greduan/dotfilesに移動したため、ファイルの新しい URL は次のとおりです。 after/plugin/statusline.vim

すべての行は同じです。


誰も答えを思いつかなかったので、私は独自の解決策を作成しました。ここで見つけることができます:

基本的には、次のことを行います。

3 行目から 23 行目では、さまざまなモードをすべて含む辞書を使用してグローバル変数を定義し、それを読み取り可能なテキストに変換しています。したがってn、これは通常を表し、 、などに変換さNormaliますInsert

25 行目から 42 行目は、ステータスラインの色を変更する関数を定義しています。現在、Solarized のみをサポートしており、お使いのバージョンにこのfork/pull requestがある場合にのみサポートされています。これらの要件を満たすと、挿入モードでは赤い背景が表示され、あらゆる種類のビジュアル モードでは緑の背景が表示されます。残りのモードは通常と同じになります。

そして118 ~ 119 行で定義した関数をステータスラインに出力し、3 ~ 23行で定義したグローバル変数を使用して現在のモードをテキスト形式で出力します。

これは、通常使用されるもの (自動コマンドなど、私が見たもの) よりもはるかにクリーンなソリューションだと思います。基本的に唯一の欠点は、テーマの変数を知る方法がないことですがhi! link StatusLine Error、たとえば、ステータスラインにテーマのエラーと同じ構文の強調表示をさせることはもちろんできます。

お役に立てれば!

于 2012-12-25T18:12:26.433 に答える