vim-tpipeline
在tmux状态栏中嵌入你的vim状态栏!
安装
使用 vim-plug:
Plug 'vimpostor/vim-tpipeline'
强烈建议在你的 ~/.tmux.conf
中添加以下内容:
set -g focus-events on
set -g status-style bg=default
set -g status-left-length 90
set -g status-right-length 90
set -g status-justify centre
重启tmux后,你应该就能在tmux中看到你的vim状态栏了。
vim-tpipeline
兼容所有状态栏,可以与其他状态栏插件(如 lualine)一起使用。如果它不能与你的状态栏兼容,请提交bug报告。
要求
- Vim 8.2.4650(或更高版本)或 Neovim 0.6(或更高版本)
- 支持真彩色(在vim中设置
set termguicolors
) - 为获得最佳体验,请使用支持焦点事件的终端(已知良好的终端有
wezterm
、konsole
和iTerm2
)
配置
此插件会自动以合理的默认设置将你的状态栏嵌入tmux。
如果你想更精确地控制它的位置,可以禁用自动配置(使用 g:tpipeline_autoembed
),然后手动嵌入状态栏,以下是一个示例:
" .vimrc
" 你也可以使用Lua进行配置,参见 :h lua-vim-variables 获取帮助
let g:tpipeline_autoembed = 0
# .tmux.conf
set -g focus-events on
set -g status-style bg=default
set -g status-left '#(cat #{socket_path}-\#{session_id}-vimbridge)'
set -g status-left-length 90
set -g status-right '#(cat #{socket_path}-\#{session_id}-vimbridge-R)'
set -g status-right-length 90
set -g status-justify centre
默认情况下,vim-tpipeline
会复制你标准的vim statusline
。
如果你想为tmux使用不同的状态栏,可以手动设置:
" tpipeline自带一个自定义的简约状态栏
let g:tpipeline_statusline = '%!tpipeline#stl#line()'
" 你也可以使用标准的状态栏语法,参见 :help stl
let g:tpipeline_statusline = '%f'
还有许多其他选项可用于适应每种特定用例。查看全面的帮助文件,使用 :help tpipeline-configure
了解更多信息。
常见问题
为什么要这样做?
通常,tmux状态栏中有大量空闲空间,因此如果你将vim状态栏放在那里,可以更好地利用空间。 毕竟,你不希望你精心制作的vim配置最终变成一个糟糕的Internet Explorer梗,对吧?
我可以在tmux之外也使用默认的 tpipeline状态栏 吗?
可以,在你的 ~/.vimrc
中使用 set stl=%!tpipeline#stl#line()
。事实上,这个插件使用了 Vim 的自动加载机制来懒加载功能,即如果你不使用tmux,你仍然可以在vim中使用状态栏而不加载不必要的功能。
tmux中的焦点事件对我不起作用
除了在 tmux
配置中添加 set -g focus-events on
,你还需要有可用的 XT
功能,你可以通过执行 tput XT
命令来测试。如果在tmux中没有这个功能,那么有三种方法可以解决这个问题:
- 在你的
tmux
配置中添加set -g default-terminal "xterm-256color"
。 - 通过在
.vimrc
中使用以下内容强制vim启用它:
let &t_fe = "\<Esc>[?1004h"
let &t_fd = "\<Esc>[?1004l"
- 基于 tmux-256color 编写你自己的自定义terminfo条目
如何停止居中窗口列表在切换窗格时闪烁?
从tmux 3.2版本开始,你可以使用 absolute-centre
代替 centre
:
-set -g status-justify centre
+set -g status-justify absolute-centre
为什么我应该使用这个插件而不是 onestatus?
- 在
onestatus
中,tmux状态栏的更新使用阻塞调用,而tpipeline
使用非阻塞作业异步更新状态栏。 tpipeline
可以直接使用你当前的vim状态栏,而onestatus
实际上并不使用你的状态栏,需要你配置它自己的状态栏。- 由于上述原因,
onestatus
无法使用许多vim功能,如你的vim配色方案,需要你重新定义颜色。在tpipeline
中,vim颜色会自动转换为tmux语法。 - 在
onestatus
中,显示当前模式或行号等简单功能需要编写自己的函数。在tpipeline
中,这些功能开箱即用。