Страницы

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

четверг, 16 мая 2019 г.

Быстрое комментирование строки

Ищу способ комментировать отдельные строки (однострочные комментарии) в исходных кодах как в визуальном режиме, так и в режиме вставки, при всем этом хотелось бы обойтись простой правкой .vimrc без дополнительных плагинов. Уверен, что это возможно, поэтому прошу указать от чего бы можно было оттолкнуться.


Ответ

В качестве отправной точки можно поступить, например, следующим образом.
function! GetCommentStyleByFileType() let file_name = buffer_name('%') if file_name =~ '\(\.\|_\)vim' return ["\"", ''] elseif file_name =~ '\.\(bat\|cmd\)' return ['::', ''] elseif file_name =~ '\.\(c\|cpp\|cs\|js\|php\)' return ['//', ''] elseif file_name =~ '\.\(ht\|x\)ml$' return [''] elseif file_name =~ '\.\(lua\|sql\)' return ['--', ''] elseif file_name =~ '\.\(vb\|vbs\)' return ["'", ''] endif return ['#', ''] endfunction au BufEnter * let b:comment = GetCommentStyleByFileType() function! CommentLine() let stsymbol = b:comment[0] let endsymbol = b:comment[1] exe ":sil! norm 0i" . stsymbol . "\A" . endsymbol . "\" endfunction function! UnCommentLine() let file_name = buffer_name('%') let stsymbol = b:comment[0] if file_name =~ '\.\(c\|cpp\|cs\|js\|php\)' let stsymbol = '\/\/' endif let endsymbol = b:comment[1] exe ":sil! norm :s/^\s*" . stsymbol . "//\" exe ":sil! norm :s/\s*" . endsymbol . "\s*$//\" endfunction exe "set =\ec" nnoremap :call CommentLine() inoremap :call CommentLine()i vmap :call CommentLine() exe "set =\eu" nnoremap :call UnCommentLine() inoremap :call UnCommentLine()i vmap :call UnCommentLine()
Так, чтобы закомментировать строку нужно нажать Alt+C, чтобы снять комментирование со строки - Alt+U. Можно забиндить на другое сочетание клавиш, использование Alt+некая_клавиша здесь для примера, ровно как и сами функции, - поэкспериментируйте, возможно сделаете нечто удобное и полезное не только для себя.

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

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