Как изменить курсор vim в режиме Insert/normal?
Я хотел бы узнать, по возможности, как изменить курсор в vim (цвет, форма и т.д.) в зависимости от того, в каком режиме вы находитесь.
Я постоянно забываю, что я не в режиме вставки и начинаю вводить код, что приводит к разного рода сумасшедшим вещам. Было бы полезно, если бы на курсоре была какая-то визуальная индикация.
Ответы
Ответ 1
Популярная опция, указывающая на переход в режим Вставки (и обратно в Normal
mode) переключает параметр cursorline
, который отвечает за
текущая строка экрана выделена.
:autocmd InsertEnter,InsertLeave * set cul!
или
:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
Ответ 2
Следующие работы для xterm/urxvt/... (Linux), iTerm2 (Mac), Git Bash с ConEmu (Windows) и т.д. (см. комментарии):
let &t_SI = "\e[6 q"
let &t_EI = "\e[2 q"
" optional reset cursor on start:
augroup myCmds
au!
autocmd VimEnter * silent !echo -ne "\e[2 q"
augroup END
Когда вы используете tmux, важно использовать его так (без \<Esc>Ptmux;
escape). tmux будет отслеживать правильную форму курсора при переключении окон/панелей. Вам может потребоваться установить TERM=xterm-256color
перед запуском tmux, если он не работает для вас.
Другие параметры (замените номер после \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).
Ответ 3
Если вы используете tmux и iTerm2 на OSX,
следующее меняет курсор с блока на курсор и выделяет текущую строку
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
кредит: https://gist.github.com/andyfowler/1195581
Ответ 4
Чтобы изменить форму курсора в разных режимах, вы можете добавить следующее в свой vimrc.
Для Gnome-Terminal (версия 2.26) Edit
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-терминале, вам, возможно, придется адаптировать его к вашим профилям.
Для Konsole в KDE4Edit
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
Это работает с несколькими вкладками и окнами.
http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes
Ответ 5
Вы можете попробовать плагин terminus vim:
В режиме вставки форма курсора меняется на тонкую вертикальную полосу. В режиме замены он меняется на подчеркивание. Вернувшись в нормальный режим, он возвращается к стандартной форме "блока".
Ответ 6
Я считаю полезным только мигать курсором в режиме Вставки и статично в других режимах.
set guicursor+=n-v-c:blinkon0
Ответ 7
Это работает правильно на xfce4-терминал:
добавьте следующий скрипт в ваш .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-терминал сохраняет настройки в .config/xfce4/terminal/terminalrc
. Сценарий изменяет TERMINAL_CURSOR_SHAPE_BLOCK
на TERMINAL_CURSOR_SHAPE_IBEAM
когда вы находитесь в режиме вставки, и возвращается к блокировке, когда вы выходите из режима вставки или vim. Не стесняйтесь менять IBEAM
на все, что вы хотите (доступны BLOCK
, IBEAM
и UNDERLINE
).
Ответ 8
Не уверен, что после нажатия клавиши ESC
кто-то еще столкнется с задержкой, чтобы вернуться в нормальный режим, чтобы показать курсор блока, но если это так, я тоже так исправлю.
На самом деле я использую iTerm2 и использую Vim внутри моего терминала на Mac. А при входе в режим вставки курсор все еще является блоком и немного сбивает с толку, когда вы находитесь в режиме вставки или нормальном режиме.
Я хотел показать тонкую линию в качестве курсора в режиме вставки и вернуться к блоку в обычном режиме, как это делает 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"
![enter image description here]()
Но, как вы можете видеть, была задержка при нажатии ESC
, чтобы выйти из режима вставки обратно в нормальный режим и снова показать блок как курсор. Чтобы исправить это, я нашел это:
set ttimeout
set ttimeoutlen=1
set listchars=tab:>-,trail:~,extends:>,precedes:<,space:.
set ttyfast
И теперь это работает довольно хорошо, как вы можете видеть:
![fix delay going back to block as cursor]()
Я надеюсь, что это может помочь кому-либо еще! 👻
Ответ 9
Если вы используете современную версию 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
Мне удалось заставить это работать со следующими настройками, взятыми из этих двух источников.
туй-курсор-форма
guicursor
Ответ 10
Обычно я использую текущий режим vim на статусной линии, между прочим. Если вы ищете простоту, вы можете установить только эту информацию в статусную линию.
Однако, как правило, действительно сумасшедшие вещи случаются, когда у вас закрыты блокировки и находятся в командном режиме (поскольку hjkl теперь HJKL - достаточно J и K достаточно, чтобы заставить вас вытащить ваши волосы, когда вы не понимаете, что происходит Сделайте :h J
и :h K
, чтобы понять, что я имею в виду). Просто остерегайтесь ключа блокировки колпачка, и вы будете в большей степени в большей степени IMO.