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

StackOverflow https://stackoverflow.com/questions/3869713

Вопрос

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

Я подумал, что смогу использовать автокоммуню, распознать тип файла и установить переменную 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; Мой .VIMRC - это коричневые 98 строк, поэтому, если вы можете, пожалуйста, помогите мне, объяснив любые ответы, которые вы предоставляете! Спасибо.

Это было полезно?

Решение

Вы можете использовать <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>

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

Другие советы

Я вытащил это с подсказки Vim Wiki в какой-то момент и использовать его сам. Единственный недостаток - это добавляет пространство к концу линии (ов) по какой-то причине, вероятно, что-то маленькое у меня упущено.

" 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top