突出显示VIM中的多个位置,与缓冲区的内容无关

时间:2014-10-10 17:18:40

标签: vim

我想强调VIM中的某些职位。该解决方案适用于空文件。

理想情况下,该命令应该像这样工作(表单只是为了理解这一点):

set colorposition=((12,12),(14,12)), ((1,1),(1,1))

在这种情况下,此命令会突出显示(第12行第12列)到(第14行第12列),以及第一个位置(第1行第1列)。

我找到的一个可能的解决方案是使用命令 match

它的工作原理如下:

让我们说我们想在(第3列第4行)中为该位置着色。我们可以使用某个突出显示组和命令匹配

highlight highlightgroup ctermbg=darkred

match highlightgroup /\%3c\%4l/

可以使用运算符 \ _ 将多个位置链接在一起。突出显示位置 3 4 1 1 将是:

match highlightgroup /\%3c\%4l\|\%1c\%1l/

需要注意的是,只能突出显示现有缓冲区内的位置。如果想在特定位置突出显示某些内容,而不存在任何文本,则命令 match 将不起作用。

自Vim 7.3起,可以使用相关选项。要设置整列的颜色,例如80,可以使用 colorcolumn

命令 colorcolumn 对缓冲区中的文本无动于衷,甚至对空文件也有效,但它只对整列进行着色,例如

set colorcolumn=80

修改

澄清我的目标是什么,并在答案部分解决Ingo提到的内容:

我在Fortran 77上工作很多。如果有一定数量的 IF THEN ELSE DO,有时固定形式的源代码会变得难以处理使用 END DO 部分。我想介绍每个级别的标记,让我们说从第81列开始。

       SUBROUTINE SUB(I,J)
C THE COLORCOLUMN IS VISIBLE AT C                                 C
       C=0
       IF(I .GT. 0) THEN                                           VISUAL_MARK1
          IF(J. LT. 1) THEN                                         VISUAL_MARK2
             C=2
          END IF                                                    VISUAL_MARK2
       END IF                                                      VISUAL_MARK1
       WRITE(*,*) I,J,C
       END SUBROUTINE

1 个答案:

答案 0 :(得分:1)

为什么要突出显示没有文字的单元格?

因为Vim是文本编辑器,所以不支持。如您所知,:match仅突出显示匹配,即现有文字。 'colorcolumn'是不超过一定宽度的辅助工具,因此在所有行中都可见。 :set virtualedit=all允许您使用光标处理不存在的位置,但不会突出显示任何内容。我能想到的唯一丑陋的解决方法是在缓冲区中添加实际的空格以匹配这些位置(然后在:write上删除它们。)