Вставить переменные VIM в текст для комментариев ярлыка
Вопрос
У меня есть простая цель: карта 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>