Как изменить курсор vim в режиме вставки / обычном режиме? - PullRequest
79 голосов
/ 27 июня 2011

Хотелось бы узнать, если возможно, как изменить курсор в vim (цвет, форма и т. Д.) В зависимости от того, в каком режиме вы находитесь.

Я постоянно забываю, что меня нет во вставкевключите режим и начните вводить код, в результате чего происходят разные сумасшедшие вещи.Было бы полезно, если бы на курсоре была какая-то визуальная индикация.

Ответы [ 8 ]

90 голосов
/ 27 июня 2011

Популярной опцией для указания переключения в режим вставки (и обратно в обычный режим) является переключение опции cursorline, которая отвечает за то, выделена ли текущая строка экрана.

:autocmd InsertEnter,InsertLeave * set cul!

или

:autocmd InsertEnter * set cul
:autocmd InsertLeave * set nocul
46 голосов
/ 08 февраля 2017

Следующее работает для 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;) - 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).
14 голосов
/ 12 мая 2015

Если вы используете 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

13 голосов
/ 27 июня 2011

Чтобы изменить форму курсора в разных режимах, вы можете добавить следующее в ваш vimrc:

Для Gnome-Terminal (версия 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-терминал, возможно, вам придется адаптировать его к своим профилям.

Для 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

7 голосов
/ 19 января 2018

Вы можете попробовать плагин terminus vim :

В режиме вставки форма курсора меняется на тонкую вертикальную полосу.В режиме замены он меняется на подчеркивание.Вернувшись в нормальный режим, он возвращается к стандартной форме «блока».

7 голосов
/ 07 марта 2014

Я считаю полезным, чтобы курсор мигал только в режиме вставки, а статический - в других режимах.

set guicursor+=n-v-c:blinkon0
0 голосов
/ 04 апреля 2019

Это правильно работает на терминале 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 доступны).

0 голосов
/ 28 июня 2011

У меня обычно есть текущий режим vim на строке состояния, между прочим. Если вы ищете простоты, вы можете установить только эту информацию в строке состояния .

Тем не менее, обычно действительно безумные вещи случаются, когда у вас нажата блокировка заглавных букв и вы находитесь в командном режиме (поскольку hjkl теперь HJKL - достаточно только J и K, чтобы заставить вас выдернуть голову, когда вы не понимаете, что происходит Сделайте :h J и :h K, чтобы понять, что я имею в виду). Просто остерегайтесь ключа блокировки колпачка , и большую часть времени у вас все будет в порядке ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...