2012-08-07 51 views
3

我在Vim 7中使用DrawIt插件來繪製一些ascii圖。是否可以在vim中顯示網格?

這可能太多了,但仍然 - 有沒有任何插件可以在後臺顯示網格,使繪圖更容易?

+2

我認爲這是不可能的,沒有黑客來源或...使您的終端窗口半透明,放置這樣的網格後面。 – romainl 2012-08-07 11:53:53

+2

我沒有關於網格的建議,但對於繪製,您可能想使用'set virtualedit = all'。這將釋放您的光標,以便您可以將光標放在沒有實際字符的位置。請參閱':''''' – 2012-08-07 15:45:11

回答

7

我不能添加任何@大衛和@ romainl的想法(我覺得@採用半透明窗口與網格其背後的靈感的romainl的建議!)。

然而,你可能會發現更容易通過可視化的光標位置:

set cursorline 
set cursorcolumn 

當然,這不是一個真正的格的替代品,但它至少可以讓你一目瞭然對準見的遊標。

+2

這真是太棒了。在我看來,甚至比電網更好。 – 2012-08-07 13:03:46

0

我傾向於同意@romainl;我想不出有什麼方法可以在Vim中真正做到這一點,而不會與源代碼混雜在一起。但是,我可以考慮一些解決方法。

  1. 在許多終端仿真器中,您可以設置背景圖像。 (例如,xfce4-terminal具有此功能)。您可以設計一個背景,每個單元格的尺寸與您的等寬字體佔用的空間相對應。

  2. Nate Kane的vim-indent-guide可能會有幫助 - 它會顯示垂直線條,您可以用來對齊字符。有關示例,請參閱screenshots頁面。

  3. 您可能會濫用Vim的突出顯示來模擬各種網格。

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 
+0

我將其複製到.vimrc。我得到的錯誤而調用該函數:處理功能 19_ToggleGrid檢測 '錯誤: 線8: E121:未定義變量:A:1 E15:無效表達式:[A:1,:2] 線19 : E121:未定義變量:dr 。 。' – 2012-08-08 12:47:45

+0

我正在使用vim 7.0。 – 2012-08-08 12:48:06

+1

@divya:請指定網格的水平線和垂直線之間的距離作爲參數。 (查看更新後的答案)例如,運行':call ToggleGrid(3,5)'。 – 2012-08-08 13:44:21

相關問題