vim中的拆分分隔符可以小于整个列宽吗?


21

我使用平铺窗口管理器(很棒)+终端多路复用器(tmux)+在vim中拆分。我根本没有窗户装饰,因此,如果程序的内容没有放弃,那么它们之间就不会有视觉上的分裂。我对这种范例非常满意,因为无论如何我都使用多个监视器并通过屏幕对任务进行分组。如果两个窗口没有并排的理由,它们将不会首先出现。

但是,这会造成一些视觉上的不和谐,在视觉上最明显的分裂在语义上是最不重要的。

  • Xorg窗口‹|›窗口=完全没有
  • Tmux窗格‹|›窗格= 1像素分隔线
  • Vim split ‹|› split = 1个字符宽的彩色列

这是一个示例,每个窗口,窗格和vim拆分并排显示:

窗玻璃和拆分

即使没有单击完整分辨率版本,您看到的白色分隔线也是屏幕上vim窗格中最不重要的分割。(请注意,vim会话右侧的灰色列实际上是第80列突出显示的内容,尽管我经常使用该大小,但它不是任何分隔符。)

我知道如何更改拆分中绘制的字符或降低配色方案的对比度。我想做的是使用与tmux相同的分割条,它不会占用任何宽度,因为它是在列之间而不是在列之间绘制的。基于终端的vim是否可能?Gvim?Neovim?裸露在外观上不显眼的分隔符,分隔柱是否可以完全关闭?

PS使用外观相似的分隔符之所以有意义,是因为我使用相同的键绑定在tmux窗格和vim拆分之间导航。相同的键在它们之间无缝导航,只有视觉边界也相同时才有意义。

Answers:


32

您对tmux错误。像每个基于终端的程序(包括Vim)一样,它仅单元绘制内容。这意味着Vim和tmux都使用相同的方法绘制垂直边框:它们仅使用类似管道的字符。

默认情况下,Tmux使用U+2502),而Vim使用|U+007C)。

如果要在Vim中使用相同的分隔符,则可以简单地使用相同的字符:

set fillchars+=vert:│

请注意,您的colorscheme可能会设置垂直拆分的背景颜色。如果是这样,您可以直接在您的配色方案中删除背景色:

hi VertSplit ctermbg=NONE guibg=NONE

大约一分钟之前就打败了你,但还是谢谢你。我不确定为什么我曾经假设不这样做。我想我给人的印象是,它正在执行某种Unicode字符合并魔术,以将分隔符覆盖在字符空间的边缘,但是我现在意识到,我有意识地考虑了一下,这将是多么荒谬。
Caleb 2015年

1
原来我需要的是hi VertSplit cterm=NONE因为它reverse是默认设置。
Lloeki '16

您是否有机会将tmux分隔符从“│”更改为“ /”?@romainl
克劳斯

@EnanAjmain IIRC我在其源代码中找到了tmux分隔符。我认为没有选择的余地,但是我距离tmux专家还很远,因此您应该查看手册。
romainl '18年

@romainl我认为你是对的。我可以更改tmux的任何主要内容,我都必须破解源代码。
克劳斯,

5

即使在我自己的屏幕截图中,tmux也不使用任何魔术,拆分仍然是单个字符宽的列。不太引人注目的视觉效果是使用了比vim的ASCII默认值笨拙的Unicode框绘图字符,并且缺少突出显示的背景颜色。

通过在rc文件中添加类似以下几行的内容,在vim中几乎可以达到相同的效果:

" Set split separator to Unicode box drawing character
set encoding=utf8
set fillchars=vert:│

" Override color scheme to make split the same color as tmux's default
autocmd ColorScheme * highlight VertSplit cterm=NONE ctermfg=Green ctermbg=NONE

使用autocmd保证,如果您切换配色方案,则高光倍率保持有效。您可能希望也可能不希望这种行为,因为某些颜色方案对此颜色组具有合理的值。

另请注意,cterm=NONE有必要改写一些将此值设置为的配色方案,从而使reverse您尝试使用的任何fg / bg值都弄乱了。


4

不,这不能在Vim中完成,并且可能很难在GVIM中实现。

Vim坚持使用终端中基于单元的寻址方式。在缓冲区中,这对于使用j/ 进行一致的垂直导航至关重要k。这种基于单元格的x和y坐标的寻址在Vim的实现中根深蒂固,我想很难克服。

另请注意:help design-not

  • Vim并不是花哨的GUI编辑器,它试图以在所有平台上保持不一致的代价来看起来不错。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.