当我输入换行符时,或者有时当我切换到正常模式时,我在 vim 中得到非常奇怪的字符(块中的 001B,显然是转义符?)。
您可以在此处看到结果:
奇怪的是它在 gvim/macvim/iTerm2 vim 中表现正常,但在 gnome-terminal 中则不行。我使用 base16-shell 来获取 base16-ocean,颜色测试成功。
下面是我对应的 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>\\"