2016-07-30 33 views
2

所以我現在這樣的解決方案,在vim評論多行:功能評論多行的.vimrc

  1. CTRL-v(進入可視塊模式)
  2. 選擇您要評論
  3. Shift-i(進入插入模式)任何註釋字符的語言使用
  4. ESC ESC(按
  5. 類型ESC鍵兩次,使第r結果顯得更快)

但我想一些幫助將這些步驟映射到我的vimrc文件。 我目前使用下面的評論線條勾勒出:

vnoremap ;/ <C-v>0I// <ESC> 

對於那些誰想要的命令所做的解釋:

你基本上鍵入;/當您在可視模式是使用這個(視覺,Visual Line和Visual Block模式都可以工作,因爲<C-v>部件強制您進入Visual Block模式,這是正確的)。

0I部件會將您置於插入模式的行首。

// <ESC>部分將插入註釋字符//並將您置回正常模式。

我需要幫助的部分是取消註釋行。如何在我的vimrc中編寫一個函數,基本上可以讓我切換//個字符?

理想的情況下,該解決方案將涉及以下內容:

  1. 選擇線
  2. ;/
  3. 如果沒有//字符,那麼它會插入他們
  4. 如果有//字符,那麼它會將它們刪除
+2

我們有http://vi.stackexchange.com/。您可能應該使用一個函數進行註釋,而另一個函數用於取消註釋,然後允許範圍不需要。 – grochmal

+2

'0I'? '我'就足夠插入線的開頭了! –

+0

哦,很酷。我不知道vi.stachexchange。我個人喜歡只有一個功能,所以你只需要記住一個命令。我還喜歡使用視覺選擇使用範圍 –

回答

6

把這個在您的.vimrc文件中:

vnoremap <silent> ;/ :call ToggleComment()<cr> 

function! ToggleComment() 
     if matchstr(getline(line(".")),'^\s*\/\/.*$') == '' 
       :execute "s:^://:" 
     else 
       :execute "s:^\s*//::" 
     endif 
endfunction 
+2

它完美的作品,但你能解釋這是如何工作的? @Meninx –

+1

它通過matchstr函數檢查每一行是否有//在開始處。如果是,則通過刪除或者刪除它們來進行替換。 (請原諒我的簡潔-mobile-)可以嗎? –

0

檢查註釋插件。它允許對所有語言都有一個綁定。

0

很容易與Python腳本

function! Comment() 
python3 << EOF 
import vim 
r = vim.current.range 
line = vim.current.buffer[r.start] 
if line.startswith('// '): 
    vim.current.buffer[r.start] = vim.current.buffer[r.start].replace('// ', '') 
else: 
    vim.current.buffer[r.start] = '// ' + vim.current.buffer[r.start] 
EOF 
endfunction 

" ctrl slash 
noremap <C-_> :call Comment()<CR>