11

我想根据我当前所处的模式更改 VIM (不是 gVIM)的光标。我想:

  • 正常和可视模式 = 块光标
  • 插入和命令模式 = I 光束光标

我尝试添加以下代码,.vimrc但它不起作用。

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

我从http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes得到了那段代码,但它说它是用于 Gnome-Terminal(2.26 版),我有 Gnome-Terminal(3.60 版)。不确定这是否是它不起作用的原因。

关于如何做到这一点的任何想法?

4

2 回答 2

1

我有 gnome-terminal 3.10.2,我通过以下步骤让它工作:

创建一个名为 gnome-terminal-cursor-shape.sh 的脚本:

#!/bin/sh
DEFAULTPROF=`dconf read /org/gnome/terminal/legacy/profiles:/default`
DEFAULTPROF=`echo "$DEFAULTPROF" | sed -e "s/^'/:/" -e "s/'$//"`
dconf write /org/gnome/terminal/legacy/profiles:/$DEFAULTPROF/cursor-shape "'$1'"

并用 ibeam、块或下划线调用它以更改光标形状。

将脚本放在 /usr/bin 或 /usr/local/bin 中,并将以下行添加到您的 .vimrc 中:

if has("autocmd")
    au InsertEnter *
        \ if v:insertmode == 'i' |
        \   silent execute "!gnome-terminal-cursor-shape.sh ibeam" |
        \ elseif v:insertmode == 'r' |
        \   silent execute "!gnome-terminal-cursor-shape.sh underline" |
        \ endif
    au InsertLeave * silent execute "!gnome-terminal-cursor-shape.sh block"
    au VimLeave * silent execute "!gnome-terminal-cursor-shape.sh block"
endif
于 2014-06-17T12:50:53.903 回答
1

对我来说,gnidmoos 解决方案在将名为 gnome-terminal-cursor-shape.sh 的脚本脚本更改为:

#!/bin/sh
gconftool-2 --set "/apps/gnome-terminal/profiles/Default/cursor_shape" --type string "$1"

(在 .vimrc 中使用相同的行)

附言。我正在运行 ubuntu 14.04,GNOME 终端 3.6.2

干杯!

于 2015-10-10T14:12:49.223 回答