首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在Vim中显示网格吗?

可以在Vim中显示网格吗?
EN

Stack Overflow用户
提问于 2012-08-07 18:53:56
回答 3查看 2.2K关注 0票数 4

我正在使用Vim7中的DrawIt插件来绘制一些ASCII图。

可能太多了,但还是-

有没有可以在后台显示网格的插件,让绘图更简单?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-07 20:41:35

我不能对@David和@romainl的想法添加任何东西(我认为@romainl关于使用半透明窗口并在其后面添加网格的建议受到了启发!)

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

代码语言:javascript
复制
set cursorline
set cursorcolumn

当然,它不能替代真正的网格,但它至少能让你一目了然地看到光标的对齐。

票数 8
EN

Stack Overflow用户

发布于 2012-08-07 23:10:11

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-08-07 20:25:43

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

  1. 在许多终端仿真器中,您可以设置背景图像。(例如,xfce4-terminal具有此功能)。你可以设计一个背景,每个单元格的尺寸对应于你的等宽字体所占用的空间。
  2. Nate Kane的vim-indent-guide可能会有所帮助-它显示了你可以用来对齐字符的垂直线。有关示例,请参见screenshots页面。
  3. 您可以利用Vim的高亮显示功能来模拟排序网格。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11844385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档