gnome-terminal vim 奇怪的字符

gnome-terminal vim 奇怪的字符

当我输入换行符时,或者有时当我切换到正常模式时,我在 vim 中得到非常奇怪的字符(块中的 001B,显然是转义符?)。

您可以在此处看到结果:

奇怪人物截图

奇怪的是它在 gvim/macvim/iTerm2 vim 中表现正常,但在 gnome-terminal 中则不行。我使用 base16-shell 来获取 base16-ocean,颜色测试成功。

下面是我对应的 vimrc:

.vimrc

答案1

根据@egmont的说法,解决方案是更新vim的光标以避免gnome-terminals的vte 错误

请参阅我更新的 vimrc 中的解决方案:https://github.com/mjedmonds/.dotfiles/commit/41c1d4639d7b2b047d260602f27a80695cf73f9c

答案2

感谢@mjedmonds 提供的原始解决方案。我发现它对 Terminator 来说相当不错,但仍然有几个错误的屏幕(例如 ptipython 的 vim)和初始光标的问题。所以我删除了苹果过滤器并添加了一些 - 潜在用户可能会从两者的比较中受益。

" Solve extra characters on vim screens in terminator in Linux
" Enable different cursors based on the mode from
" https://github.com/mjedmonds/dotfiles/commit/41c1d4639d7b2b047d260602f27a80695cf73f9c
" Information on cursors to complete it from
" https://vim.fandom.com/wiki/Change_cursor_shape_in_different_modes"

if has("autocmd")
  au BufNewFile,VimEnter,BufEnter,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

let &t_SI = "\<Esc>P\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_SR = "\<Esc>P\<Esc>\<Esc>]50;CursorShape=2\x7\<Esc>\\"
let &t_EI = "\<Esc>P\<Esc>\<Esc>]50;CursorShape=2\x7\<Esc>\\"

相关内容