Tmux 速成教程:技巧和调整(4)

在默认情况下,当通过 Tmux 运行 Vim 时,无论当前 Vim 是处于插入模式、可视模式还是其他模式,光标的形状都是一样的。这样就很难判断当前的 Vim 模式是什么。若要避免这个问题,就需要让 Tmux 通知 iTerm 更新光标的形状。为此,需要将以下配置加入到文件 ~/.vimrc 中。

if exists('$ITERM_PROFILE')

if exists('$TMUX')

let&t_SI ="\<Esc>[3 q"

let&t_EI ="\<Esc>[0 q"

else

let&t_SI ="\<Esc>]50;CursorShape=1\x7"

let&t_EI ="\<Esc>]50;CursorShape=0\x7"

endif

end

在这里我要感谢 Andy Fowler,是他最先分享了调整光标的形状这个技巧

调整粘贴时的文本缩进

在 Vim 中粘贴文本时可能会遇到这样的问题,有时文本的缩进会发生变化,特别是在粘贴大量的文本时,这个问题会更加明显。虽然可以通过在粘贴前执行 :set nopaste 来解决这个问题,但是这里还有一种更好的解决方法。就是把下面这段配置加入到配置文件 ~/.vimrc 中,这样 Vim 就会自动地阻止粘贴文本时的自动缩进。

" for tmux to automatically set paste and nopaste mode at the time pasting (as

" happens in VIM UI)

function!WrapForTmux(s)

if!exists('$TMUX')

return a:s

endif

let tmux_start ="\<Esc>Ptmux;"

let tmux_end ="\<Esc>\\"

return tmux_start . substitute(a:s,"\<Esc>","\<Esc>\<Esc>",'g'). tmux_end

endfunction

let&t_SI .=WrapForTmux("\<Esc>[?2004h")

let&t_EI .=WrapForTmux("\<Esc>[?2004l")

function!XTermPasteBegin()

set pastetoggle=<Esc>[201~

set paste

return""

endfunction

inoremap <special><expr><Esc>[200~XTermPasteBegin()

在这里我要感谢 Marcin Kulik,是他最先分享了这个技巧

其他能够提升 Tmux 体验的工具或技巧 Tmuxinator (为项目自动创建会话)

假设你正在开发应用程序 A。在开发过程中,经常要创建 Tmux 会话,会话中包含“server”、“editor”(用于编写代码)和“shell”(用于运行系统命令)这 3 个窗口。不仅如此,在一天之中的某个特定的时间你还需要临时进入到应用程序 B 的开发工作中。于是你又不得不创建另一个会话,虽然有略微的不同(比如目录和某些命令),但是会话中还是要包含应用程序 A 中的那 3 个窗口。但是有了 Tmuxinator,你就可以为每个Tmux 会话声明一个配置,然后用 1 条命令就能创建出这个会话了。这功能太棒了,不是吗。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/16245.html