Вставьте переменные vim в текст для ярлыка комментария - PullRequest
3 голосов
/ 06 октября 2010

У меня есть простая цель: Map Ctrl-C, команда, которую я никогда не использовал, чтобы убить vim, чтобы автоматически вставлять в начале строки правильный символ (ы), чтобы закомментировать эту строку в соответствии с типом файла.

Я подумал, что мог бы использовать автокоманду для распознавания типа файла и установить переменную vim для правильного символа комментария, когда файл открыт. Поэтому я попробовал что-то вроде:

" Control C, which is NEVER used. Now comments out lines!
autocmd BufNewFile,BufRead *.c let CommentChar = "//"
autocmd BufNewFile,BufRead *.py let CommentChar = "#"
map <C-C> mwI:echo &CommentChar<Esc>`wll

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

Курсив - это часть, с которой у меня проблемы; это только там как заполнитель, чтобы представлять то, что я хочу сделать. Можете ли вы помочь мне понять, как этого добиться? Бонусные баллы, если вы используете strlen (CommentChar), чтобы сделать правильное количество пробелов вправо! Дополнительные бонусные баллы для vim-master, которые включают, как делать комментарии в стиле блока, если вы находитесь в визуальном режиме !!

Я все еще довольно новичок в сценариях vim; my .vimrc - это жалкие 98 строк, поэтому, пожалуйста, помогите мне, объяснив любые ваши ответы! Спасибо.

Ответы [ 2 ]

5 голосов
/ 06 октября 2010

Вы можете использовать <C-r> здесь:

noremap <C-c> mwI<C-r>=g:CommentChar<CR><Esc>`wll

см. :h i_CTRL-R.

Также посмотрите на NERDCommenter плагин, с ним отображение будет выглядеть так:

" By default, NERDCommenter uses /* ... */ comments for c code.
" Make it use // instead
let NERD_c_alt_style=1
noremap <C-c> :call NERDComment(0, "norm")<CR>

И вам не придется самостоятельно определять символы комментария.

2 голосов
/ 06 октября 2010

В какой-то момент я снял это с vik tips viki и использую его сам.Единственным недостатком является то, что он по какой-то причине добавляет пробел в конец строки (строк), возможно, что-то маленькое, что я пропустил.

" Set comment characters for common languages
autocmd FileType python,sh,bash,zsh,ruby,perl,muttrc let StartComment="#" | let EndComment=""
autocmd FileType html let StartComment="<!--" | let EndComment="-->"
autocmd FileType php,cpp,javascript let StartComment="//" | let EndComment=""
autocmd FileType c,css let StartComment="/*" | let EndComment="*/"
autocmd FileType vim let StartComment="\"" | let EndComment=""
autocmd FileType ini let StartComment=";" | let EndComment=""

" Toggle comments on a visual block
function! CommentLines()
    try
        execute ":s@^".g:StartComment." @\@g"
        execute ":s@ ".g:EndComment."$@@g"
    catch
        execute ":s@^@".g:StartComment." @g"
        execute ":s@$@ ".g:EndComment."@g"
    endtry
endfunction

" Comment conveniently
vmap <Leader>c :call CommentLines()<CR>
...