我正在尝试在.vimrc
中编写一些函数来评论和取消注释我的代码文件。我的程序成功运行,但.ttl
个文件除外。
我使用的功能如下:
" Add comment and uncomment
map qq :call Comment()<CR>
map ww :call Uncomment()<CR>
function! Comment()
let ft = &filetype
if ft == 'php' || ft == 'ruby' || ft == 'sh' || ft == 'make' || ft == 'python' || ft == 'perl'
silent s/^/\#/
elseif ft == 'c' || ft == 'cpp' || ft == 'java' || ft == 'javascript' || ft == 'go'
silent s:^:\/\/:g
elseif ft == 'ttl'
silent s/^/;//
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 == 'c' || ft == 'cpp' || ft == 'java' || ft == 'javascript' || ft == 'go'
silent s:^\/\/::g
elseif ft == 'ttl'
silent s/^\;/
elseif ft == 'vim'
silent s:^\"::g
endif
endfunction
答案 0 :(得分:1)
删除最后一个斜杠:silent s/^/;/
,它会起作用。顺便说一句,lots of plugins已经做了同样的事情。但是,如果您仍想编写自己的脚本,我建议您检查:he commentstring
和use only nonrecursive mappings,即nnoremap
,而不仅仅是map
。
答案 1 :(得分:0)
正如Andy Rk所提到的,有些插件可以做到:如果你没有创建 这些用于学习目的的功能,使用插件可以为您节省很多 工作。
我个人使用NERDCommenter 这真的很好我认为值得一看:
安装非常简单:如果您只是使用插件管理器
必须在.vimrc
中添加一行。 (例如vim-plug
只需将Plug 'godlygeek/tabular'
添加到.vimrc
,然后运行:PlugInstall
即可
它准备好了。
支持大量文件类型:该插件适用于300多种类型 开箱即用的文件。想想让所有人都能拯救你。
行为非常明智:可能有很多不同的行为,
例如,使用.c
文件,您可以用不同的方式评论选择,
只需在视觉上选择一行代码并查看结果:
导 + C + C
/*int main()*/
/*{*/
/*printf("Hello World");*/
/*return 0;*/
/*}*/
/*int main()
{
printf("Hello World");
return 0;
}*/
/*
*int main()
*{
* printf("Hello World");
* return 0;
*}
*/
许多其他选项可用,如中所述 README
如果您不喜欢视觉选择,也可以使用前缀[count]mapping
将操作应用到光标后的[count]
行。
您也可以简单地取消注释任何注释行 导 + C + û
也许你应该试一试,看看你是否还需要编写自定义函数。
答案 2 :(得分:0)
我强烈建议您评论commentary(我使用的)插件,Nerd Commenter,EnhCommentify,tComment,...,etc。使用插件并不羞耻。特别是因为评论翻转看起来比预期更复杂。
只需将'commentstring'
设置为您的文件类型的评论样式即可。如果Vim识别您的文件类型,通常会为您设置。请参阅:h 'commentstring'
。
更改php 'commentstring'
的示例。将以下内容添加到~/.vim/after/ftplugin/php.vim
:
set commentstring=#\ %s
注意:我使用评论这可能不适用于其他评论插件。一如既往,请阅读文档。
:h 'commentstring'
:h :set
:h filetype
:h new-filetype
:h ftdetect
:h ftplugins
:h after-directory