2014-01-14 64 views
4

對於標題風格的註釋(包括在文件中的代碼主要的新章節)在我工作的地方,我們用下面的標準:VIM腳本包圍與註釋字符多行註釋

################################## 
# This is a multiline comment # 
# and we've surrounded it by the # 
# comment symbol.    # 
################################## 

當有一個漫長的多行評論(因爲經常出現描述性標題),這可能需要一分鐘。這是一個微不足道的任務,我想自動化它。我的目標是編寫一個腳本,允許我選擇範圍(以可視模式),輸入命令並輸入註釋字符,從而將選定的行包圍在上面的框中。我在VIM腳本上做了一些嘗試,但說實話,以前從未寫過VIM腳本,我的代碼很混亂,而且我認爲這對於發佈它的原因實際上是不利的。

任何有關如何去建設這個建議?

+1

即 「企業標準」 是繁瑣的維護;因爲即使在功能非常強大的Vim中,您也需要一個精心設計的功能來完成此操作,但在其他編輯器中它不會更容易/自動化。至少刪除尾部對齊的'#'字符;這使得它更容易格式化。 –

+0

@alaprise FYI:https://github.com/sk1418/blockit :) – Kent

回答

6

你不需要「分鐘」來完成這項工作。與vim的ctrl-v塊選擇與I or cr (replace)你可以做到這一點很容易。但是,如果你需要做的,每天100次,這個小功能可以幫助你:

let g:wrap_char = '#' 
function! WrapThem() range 
    let lines = getline(a:firstline,a:lastline) 
    let maxl = 0 
    for l in lines 
     let maxl = len(l)>maxl? len(l):maxl 
    endfor 
    let h = repeat(g:wrap_char, maxl+4) 
    for i in range(len(lines)) 
     let ll = len(lines[i]) 
     let lines[i] = g:wrap_char . ' ' . lines[i] . repeat(' ', maxl-ll) . ' ' . g:wrap_char 
    endfor 
    let result = [h] 
    call extend(result, lines) 
    call add(result,h) 
    execute a:firstline.','.a:lastline . ' d' 
    let s = a:firstline-1<0?0:a:firstline-1 
    call append(s, result) 
endfunction 

來源,文件,注意

  • g:wrap_char您可以設置任何字符爲你的邊界,在這裏我使用#
  • 您可以直觀選擇線和與炭包起來
  • 您可以通過調用函數
  • ,你可以作爲函數的一個包裝創建您自己的命令或創建映射
給在命令行範圍

小演示:

enter image description here

+0

你用什麼來創建GIF?這是太棒了! – alfredodeza

+0

這真是太棒了,我從你的來源中學到了很多東西。非常感謝您爲我整理這一切! –

+0

應該指出,這隻適用於可打印的ASCII字符。製表符或任何非ASCII將打破正確的對齊。 'len()'是字節長度;你需要使用'strdisplaywidth()'來代替! –

0

如果這些插件在重新發明輪子之前具有所需的功能,我會建議跳入NERDcommentertcomment。如果不是,他們的來源可能是一個很好的起點。