Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Комментирование куска текста в vim

#vim


Есть любой кусок текста, хотелось бы его полностью закомментировать за пару действий
вне зависимости от его размера. 
    


Ответы

Ответ 1



Плагином пользоваться не хотелось бы по той простой причине - что нужна универсальность) Частенько приходится работать с разных машин, в том числе и чужих - поэтому только чистый vim) Для себя нарыл сейчас такой вариант: ctr+v дальше } - до конца абзаца либо j,k выделение. Дальше I , # и

Ответ 2



Я для этого пользуюсь плагином tComment. С ним можно выделить текст, нажать комбинацию клавиш (горячие клавиши настраиваются), и нужные строки будут закомментарены. Раскомментаривание происходит так же. Плюс есть ещ несколько полезных горячих клавиш.

Ответ 3



Можно использовать The NERD Commenter или аналоги. Комментирование в нажатие двух-трех кнопок. Предварительно они требуют выделить текст, а это уже отдельное действие и в некоторых случаях может быть выполненно и за одно-два нажатия.

Ответ 4



Этот ответ годится только для однострочных комментариев, но тем не менее. Для комментирования C++-кода можно так сделать: ^Ctrl+v5jI// где ^ - Shift+6, 5 - количество строк вниз, I - Shift+i. Возможны любые перемещения вместо 5j, например, }. Для другого языка можно заменить // на соответствующий символ комментария (#, -- и т.п.) Upd: Спасибо @Dofri и @KoVadim за замечания. Dofri более прав оказался относительно Ctrl+v.

Ответ 5



Для комментирования блока я всегда использовал режим визуального выделения, который вызывается по ctrl+v (в gvim для windows по умолчанию ctrl+q). Нужно поставить курсор, например, в начале строки наверху выделяемого блока, нажать ctrl+v , переместить курсор в конец параграфа, нажав } , затем нажать I (shift+i) , ввести символ комментария (например, #) и нажать ESC. детальнее: https://lisakov.com/blog/vim-comment-block/

Ответ 6



У меня было желание не просто быстро комментировать/раскомментировать кусок текста, но чтобы еще и символ комментария автоматически выбирался верный. И из любопытства я написал плагин, которым вот уж пару лет как пользуюсь и сильно привык, надо сказать ) Работает оно так: выделяю кусок текста и нажимаю hh. Если выделить закомментированный кусок и нажать hh, то кусок раскомментируется. .vimrc: nmap hh :LinesCommentNextState vmap hh :LinesCommentNextState код плагина: function! s:LinesCommentNextState() range let l:extension = expand('%:e') let l:comment_symbol = "#" if l:extension == "c" let l:comment_symbol = "\/\/" elseif l:extension == "cpp" let l:comment_symbol = "\/\/" elseif l:extension == "h" let l:comment_symbol = "\/\/" elseif l:extension == "hpp" let l:comment_symbol = "\/\/" elseif l:extension == "xs" let l:comment_symbol = "\/\/" elseif l:extension == "vim" let l:comment_symbol = "\"" elseif l:extension == "lua" let l:comment_symbol = "--" else "default '#' endif let l:first_line = getline(a:firstline) let l:need_comment = 1 " if string already commented, no need comment twice if l:first_line =~ '\v^(\s)*' . l:comment_symbol let l:need_comment = 0 endif for n in range (a:firstline, a:lastline) let l:line = getline (n) if len(l:line) == 0 continue endif if l:need_comment == 1 " comment it! let l:new_line = l:comment_symbol . l:line " but if beginning from space, need save all spaces if l:line =~ '\v^\s' let l:matches = matchlist(l:line, '\v^(\s+)(.*)') let l:new_line = l:matches[1] . l:comment_symbol . l:matches[2] endif else let l:new_line = l:line if l:line =~ '\v^(\s*)' . l:comment_symbol let l:matches = matchlist(l:line, '\v^(\s*)' . l:comment_symbol . '(.*)') let l:new_line = l:matches[1] . l:matches[2] endif endif call setline (n, l:new_line) endfor endfunction function! SaveCursor() let s:cursor = getpos('.') endfunction function! RestoreCursor() call setpos('.', s:cursor) unlet s:cursor endfunction command! -range LinesCommentNextState call SaveCursor() | ,call s:LinesCommentNextState() | call RestoreCursor()

Комментариев нет:

Отправить комментарий