4

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

这可能太多了,但仍然——</p>

有没有插件可以在背景中显示网格,使绘图更容易?

4

3 回答 3

8

我无法在@David 和@romainl 的想法中添加任何内容(我认为@romainl 使用带有网格的半透明窗口的建议受到了启发!)。

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

set cursorline
set cursorcolumn

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

于 2012-08-07T12:41:34.553 回答
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
于 2012-08-07T15:10:11.123 回答
0

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

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

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

  3. 你可以滥用 Vim 的高亮来模拟各种网格。

于 2012-08-07T12:25:42.547 回答