/
alzoi
/
vimrc
Обзор
Документация
Войти
/
alzoi
/
vimrc
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
_vimrc1
158 строк
4 KB
alzoi
Create _vimrc1
26 мар 2019, 15:35
Не верифицирован
26 мар 2019, 15:35
558f922
Код
Авторство
О чём код?
"let Comment='//' "xnoremap <C-\> :norm 0i<C-r>=Comment<CR><CR> "xnoremap & :norm ^<C-r>=len(Comment)<CR>x<CR> "map <C-\> 0i//<Esc> ":map ucl 02x "noremap <silent> <C-\> :update<CR> "vnoremap <silent> <C-\> <C-C>:update<CR> "inoremap <silent> <C-\> <C-O>0// " Функция выполняет коментирование блока кода в зависимости от расширения файла. " https://vim.fandom.com/wiki/Comment_%26_Uncomment_multiple_lines_in_Vim function! Comment() let ft = &filetype if ft == 'php' || ft == 'ruby' || ft == 'sh' || ft == 'make' || ft == 'python' || ft == 'perl' silent s/^/\#/ elseif ft == 'javascript' || ft == 'c' || ft == 'cpp' || ft == 'java' || ft == 'objc' || ft == 'scala' || ft == 'go' silent s:^:\/\/:g elseif ft == 'tex' silent s:^:%:g elseif ft == 'vim' silent s:^:\":g endif endfunction " Функция выполняет раскоментирование блока кода в зависимости от расширения файла. function! Uncomment() let ft = &filetype if ft == 'php' || ft == 'ruby' || ft == 'sh' || ft == 'make' || ft == 'python' || ft == 'perl' silent s/^\#// elseif ft == 'javascript' || ft == 'c' || ft == 'cpp' || ft == 'java' || ft == 'objc' || ft == 'scala' || ft == 'go' silent s:^\/\/::g elseif ft == 'tex' silent s:^%::g elseif ft == 'vim' silent s:^\"::g endif endfunction "source ~/vcomments.vim map <C-\> :call Comment()<CR> map <C-Q> :call Uncomment()<CR> function! s:LinesCommentNextState() range let l:extension = expand('%:e') let l:comment_symbol = "#" " Имя файла. let l:f_name = expand('%:t') if l:f_name == "_vimrc" let l:comment_symbol = "\"" else 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 = "--" endif endif let l:first_line = getline(a:firstline) let l:need_comment = 2 " Если строка уже закоментирована, то не нужно комментировать дважды. "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) == 1 "let l:new_line = '#' continue endif let l:new_line = l:comment_symbol . l:line . len(l:line) " " Коментируем строки. " if l:need_comment == 1 " let l:new_line = l:comment_symbol . l:line " " " Если нужно сохранить ведущие отступы. " "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() | <line1>,<line2>call s:LinesCommentNextState() | call RestoreCursor() "nmap <C-e> :LinesCommentNextState <CR> "vmap <C-e> :LinesCommentNextState <CR> function! Comment() range let ft = &filetype let l:comment_symbol = "#" if ft == 'javascript' || ft == 'c' || ft == 'cpp' || ft == 'java' || ft == 'objc' || ft == 'scala' || ft == 'go' let l:comment_symbol = "//" elseif ft == 'vim' let l:comment_symbol = "\"" endif for line_number in range(a:firstline, a:lastline) let current_line = getline(line_number) " Вставляем в первый символ знак комментария. let current_line_commented = substitute(current_line, '^', comment_symbol, "g") call setline(line_number, current_line_commented) endfor endfunction "command! -range Comment call Comment() command! -range Comment <line1>,<line2>call Comment() nmap <C-e> :Comment <CR> vmap <C-e> :Comment <CR>