可能であれば、現在のモードに応じてVimのカーソルを(色、形などで)変更する方法を教えてください。
私は挿入モードではないことを常に忘れ、コードを入力し始めます。その結果、あらゆる種類のクレイジーなことが起こります。カーソルに何らかの視覚的表示があった場合に役立ちます。
可能であれば、現在のモードに応じてVimのカーソルを(色、形などで)変更する方法を教えてください。
私は挿入モードではないことを常に忘れ、コードを入力し始めます。その結果、あらゆる種類のクレイジーなことが起こります。カーソルに何らかの視覚的表示があった場合に役立ちます。
回答:
挿入モードへの切り替えと挿入モードからの切り替えを示す一般的なオプションcursorline
は、現在の画面の行が強調表示されているかどうかを示すオプションの切り替えです(を参照:help cursorline
)。
:autocmd InsertEnter,InsertLeave * set cul!
または、代わりに
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
変更CursorLine
(参照お好みに合わせてカーソルラインのスタイルを変更するためにハイライト表示グループを:help :highlight
して
:help highlight-groups
)。
cursorline
オプションは、プラットフォーム固有の機能には依存しません。この+syntax
機能でコンパイルされたすべてのVimインスタンスで使用できます(通常はそうです)。
echo 'autocmd InsertEnter,InsertLeave * set cul!' >>~/.vimrc
以下は、Linux上のxterm、urxvt、およびその他のターミナルエミュレータで動作します。macOS上のiTerm2; Windows上のConEmuでのGit Bash。その他(コメントを参照):
let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"
" Optionally reset the cursor on start:
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END
その他のオプション(番号をの後に置き換えます\e[
):
Ps = 0 -> blinking block.
Ps = 1 -> blinking block (default).
Ps = 2 -> steady block.
Ps = 3 -> blinking underline.
Ps = 4 -> steady underline.
Ps = 5 -> blinking bar (xterm).
Ps = 6 -> steady bar (xterm).
あなたが使用する場合tmuxは、(なくても、そのようにそれを使用することが重要である\<Esc>Ptmux;
エスケープ)。ウィンドウ/ペインを切り替えると、tmuxは正しいカーソルの形状を追跡します。
うまくいかない場合は、TERM=xterm-256color
tmuxを開始する前に設定するか、これを追加してください.tmux.conf
(@Steven Luに感謝します)。
set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
set -ga terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
tmux構成で最終的に動作します。どうやらset
for terminal-overrides
なし-a
で使用すると、デフォルトですでに設定されている設定が上書きされます。
使用している場合はtmuxはとiTerm2を上のMacOS、
以下のブロックからカーソルやハイライトにカーソルを変更し、現在の行
if exists('$TMUX')
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
terminal-overrides
が追加されているだけであることを確認することでしたので、の,*:Ss=\E[%p1%d q:Se=\E[2 q
一部を壊しませんでしたterminal-overrides
。したがって、私の構成は次のようになりますset -sa terminal-overrides ",xterm-256color-italic:Tc"
(カーソルスタイルSs / Seを踏みつぶすことなく有効にする24ビットカラーを設定するには
さまざまなモードでカーソルの形状を変更するには、.vimrc
ファイルに以下を追加します。
GNOME端末(バージョン2.26)の場合:
if has("autocmd")
au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"
au VimLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"
endif
GNOMEターミナルで複数のプロファイルを使用する場合は、これをプロファイルに適合させる必要がある場合があります。
KDE4のKonsoleの場合:
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
これは複数のタブとウィンドウで機能します。
参照:「異なるモードの変更カーソルの形状の」Vimのヒントウィキ。
set ttimeoutlen=0
あなたはterminus vimプラグインを試すことができます:
挿入モードでは、カーソルの形状が細い縦棒に変わります。置換モードでは、下線に変わります。通常モードに戻ると、標準の「ブロック」形状に戻ります。
Escキーを押して通常モードに戻ってブロックカーソルを表示した後、他の誰かが遅延に直面しているかどうかはわかりませんが、そうであれば、これも私が修正する方法です。
実際、私はiTerm2を使用しており、macOSのターミナル内でVimを使用しています。また、挿入モードに入ると、カーソルはまだブロックであり、挿入モードまたは通常モードのときは混乱します。
MacVimのように、挿入モードでは細い線をカーソルとして表示し、通常モードではブロックに戻したいと思っていました。そしてそれを行うには、それは非常に簡単です、これをここで説明するように私の.vimrc
ファイルに追加するだけです:
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
しかし、ご覧のように、を押してESC
挿入モードを終了して通常モードに戻し、ブロックを再びカーソルとして表示すると遅延が発生しました。だからそれを修正するために私はこれを見つけました:
set ttimeout
set ttimeoutlen=1
set listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast
そして今見ることができるようにそれはかなりうまく働きます:
私はそれが他の誰にも役立つことを願っています!👻
これは他の人がすでに提供している答えに多くを追加するとは思わないが、何とかして1つの場所に物事を要約し、関連する参照へのリンクも付けたかった。
これは、私の関連するスニペット.vimrc
です。
" Cursor appearance
"
" See also: [1]'ANSI Control Functions Summary', [2]DECSCUSR, [3]xterm+tmux
" entry in terminfo.src.
" [1] https://www.vt100.net/docs/vt510-rm/chapter4.html
" [2] https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
" [3] https://raw.githubusercontent.com/mirror/ncurses/master/misc/terminfo.src
"
" On:
" - entered insert mode
let &t_SI = "^[[5 q^[]12;Magenta\007" " blinking bar (Ss) in magenta (Cs)
" - entered replace mode
let &t_SR = "^[[0 q^[]12;Red\007" " blinking block (Ss) in red (Cs)
" - leaving insert/replace mode
let &t_EI = "^[[2 q^[]112\007" " terminal power-on style (Se) and colour (Cr)
注:'^['
文字は、実際には1つのESC
(エスケープシーケンス)制御文字です。
これはxfce4-terminalで正しく動作します:
次のスクリプトを追加します .vimrc
if has("autocmd")
au InsertEnter * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_BLOCK/TERMINAL_CURSOR_SHAPE_IBEAM/' ~/.config/xfce4/terminal/terminalrc"
au InsertLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"
au VimLeave * silent execute "!sed -i.bak -e 's/TERMINAL_CURSOR_SHAPE_IBEAM/TERMINAL_CURSOR_SHAPE_BLOCK/' ~/.config/xfce4/terminal/terminalrc"
endif
簡単に言うと、xfce4-terminalは設定を.config/xfce4/terminal/terminalrc
ファイルに保存します。スクリプトは、挿入モードのときに変更さTERMINAL_CURSOR_SHAPE_BLOCK
れTERMINAL_CURSOR_SHAPE_IBEAM
、挿入モードまたはvimを終了するとブロックに戻ります。変更する自由を感じるIBEAM
あなたが欲しいものを(BLOCK
、IBEAM
およびUNDERLINE
利用可能)。
の最新バージョンを使用しnvim
ていて、これを実現したい場合は、上記のこれらの空想的な回避策のいくつかを回避できます。
以下の設定は、通常モードではブロックカーソルから、置換では下線カーソルに、挿入では行カーソルに切り替わります。
# ~/.tmux.conf
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q',w
" ~/.vimrc
" Sets cursor styles
" Block in normal, line in insert, underline in replace
set guicursor=n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20
私はこれらの2つのソースから引き出された次の設定でこれをうまく機能させることができました。
私は通常、とりわけ現在のvimモードをステータスラインに持っています。単純さを求める場合は、この情報のみをステータスラインに設定できます。
ただし、通常、本当に奇妙なことは、Caps Lockを押してコマンドモードにすると発生します(hjklはHJKLになっているため、JとKだけで、何が起こっているのかわからないときに髪を引っ張ることができます。:h J
そして:h K
、私が何を意味するのかを見るために)。ただ、キーロックのキャップを注意してください、あなたが最も時間のIMO大丈夫です。