Como fazer com que o cursor mude de linha fina para bloco com base no modo normal ou de inserção no Console Vim no Terminal do Gnome

6

Estou mudando do Gvim para o Console Vim usando o Terminal Gnome 2.32.1.

Eu gostei muito do Gvim como o cursor seria um quadrado sólido quando no modo normal e linha fina quando no modo de inserção.

  • Existe uma maneira de produzir essa funcionalidade ao executar o console Vim no terminal do Gnome?

  • Se não for possível, quais truques existem para saber em que modo você está? Eu sei que há o modo exibido na parte inferior da tela, mas isso não parece ser tão útil quanto o cursor (que é onde meus olhos estão olhando). Ou você apenas se acostuma com a prática?

por Jeromy Anglim 14.05.2011 / 09:03

3 respostas

8

Para o gnome-terminal, adicione isso ao seu ~/.vimrc (a ser criado se estiver faltando):

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

Encontrado aqui: Altere a forma do cursor em diferentes modos .

EDITAR

Altere o último ibeam para block , para sair com um cursor de bloco.

    
por enzotib 14.05.2011 / 09:48
1

Para a versão do terminal do gnome > 3.15
Adicione isto ao seu ~ / .vimrc.

if has("autocmd")
  au VimEnter,InsertLeave * silent execute '!echo -ne "\e[2 q"' | redraw!
  au InsertEnter,InsertChange *
\ if v:insertmode == 'i' | 
\   silent execute '!echo -ne "\e[6 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\   silent execute '!echo -ne "\e[4 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
endif

Você obterá um cursor de bloco no modo normal e um fino no modo de inserção.

    
por markroxor 27.05.2017 / 16:34
0

Não é necessário usar autocommands ou gconftool para isso - o Vim agora suporta nativamente.

Insira as seguintes linhas no seu vimrc:

let &t_SI = "\<esc>[5 q"  " blinking I-beam in insert mode
let &t_SR = "\<esc>[3 q"  " blinking underline in replace mode
let &t_EI = "\<esc>[ q"  " default cursor (usually blinking block) otherwise

Estas sequências devem funcionar em todos os emuladores de terminais baseados em VTE desde a versão 0.39 do VTE, lançada no final de 2014, bem como no xterm. Se você quiser parar o cursor piscando, adicione um a cada um dos números e insira um 2 na seqüência de t_EI (as seqüências possíveis são listadas em esta resposta ; veja também o manual do VT510 ).

    
por Josh 29.07.2018 / 19:00