是否可以在vim中显示网格?

时间:2012-08-07 10:53:56

标签: vim vim-plugin

我在Vim 7中使用DrawIt插件来绘制一些ascii图。

这可能太多了,但仍然 - 是否有任何可以在背景中显示网格的插件,以使绘图更容易?

3 个答案:

答案 0 :(得分:7)

我无法在@David和@ romainl的想法中添加任何内容(我认为@ romainl建议使用带有网格的半透明窗口的灵感!)。< / p>

但是,您可能会发现使用以下方法可视化光标位置更容易:

set cursorline
set cursorcolumn

当然它不能代替真正的网格,但它至少可以让你一眼就看到光标的对齐方式。

答案 1 :(得分:2)

让我提出一个使用Vim模拟引导网格的实现 突出功能。以下函数创建必要的 突出显示两个强制参数和另外两个可选参数。 前两者是水平线和垂直线之间的距离, 相应地。后面的参数是高度和宽度 用网格覆盖的区域(相应地用行和字符表示)。当这些 参数未指定缓冲区中的行数和长度 使用中最长的一行。

function! ToggleGrid(...)
    if exists('b:grid_row_grp') || exists('b:grid_prev_cc')
        call matchdelete(b:grid_row_grp)
        let &colorcolumn = b:grid_prev_cc
        unlet b:grid_row_grp b:grid_prev_cc
        return
    endif

    let [dr, dc] = [a:1, a:2]
    if a:0 < 4
        let [i, nr, nc] = [1, line('$'), 0]
        while i <= nr
            let k = virtcol('$')
            let nc = nc < k ? k : nc
            let i += 1
        endwhile
    else
        let [nr, nc] = [a:3, a:4]
    endif
    let rows = range(dr, nr, dr)
    let cols = range(dc, nc, dc)

    let pat = '\V' . join(map(rows, '"\\%" . v:val . "l"'), '\|')
    let b:grid_row_grp = matchadd('ColorColumn', pat)
    let b:grid_prev_cc = &colorcolumn
    let &colorcolumn = join(cols, ',')
endfunction

答案 2 :(得分:0)

我倾向于同意@romainl;我想不出有任何方法可以在Vim中真正做到这一点,而不会破坏源代码。但是,我可以想到一些解决方法。

  1. 在许多终端仿真器中,您可以设置背景图像。 (xfce4-terminal具有此功能,例如)。您可以设计一个背景,其中每个单元格的尺寸对应于等宽字体占用的空间。

  2. Nate Kane的vim-indent-guide可能会有所帮助 - 它会显示可用于对齐字符的垂直线条。有关示例,请参阅screenshots页面。

  3. 您可以滥用Vim的突出显示来模拟各种网格。