Vim ect文本块使用shift+←/→ 箭头键 您可以重复按下下面的删除键,就像常规的删除按钮一样
Vim ect文本块使用shift+←/→ 箭头键 您可以重复按下下面的删除键,就像常规的删除按钮一样,vim,comments,Vim,Comments,按d或x删除字符,必要时重复 我使用(在vim.org上找到) P>它使用C、C++、java、PHP(2345)、PRC、CSS、HTML、HTM、XML、XHTML、VIM、VIMRC、SQL、SH、KSH、CLSH、Perl、TEX、FORTRAN、ML、CAML、OCAML、VHDL、HASKEL和正常文件 它在正常和可视模式下在不同的源文件中添加注释和取消注释行 用法: CtrlC至注释一行 CtrlX至取消评论一行 切换TV并选择多行,然后点击Ctrl对所选多行进行注释 移动TV
- CtrlC至注释一行
- CtrlX至取消评论一行
- 切换TV并选择多行,然后点击Ctrl对所选多行进行注释
- 移动TV并选择多行,然后点击CtrlX取消对所选多行的注释
#code code
#code
#code code code
code code
code
code code code
显示行号:
:set number
然后
或者这个:
:%s/^/#/ will comment out all lines in file
如何取消vi中以下三行的注释:
#code code
#code
#code code code
code code
code
code code code
将光标放在左上角的#
符号上,然后按CtrlV。这将使您处于可视块模式。按下向下箭头或J三次以选择所有三行。然后按D键。所有评论都消失了。要撤消,请按U
如何评论vi中的以下三行:
#code code
#code
#code code code
code code
code
code code code
将光标放在左上角的字符上,按CtrlV。这将使您处于可视块模式。按↓ 或J三次以选择所有三条线。然后按:
I//Esc
这是一个大写的I,//和逃逸
按ESC键时,所有选定的行都将获得您指定的注释符号。我使用Tim Pope的插件 我把菲尔和jqno的答案结合起来,用空格作了不连贯的评论:
autocmd FileType c,cpp,java,scala let b:comment_leader = '//'
autocmd FileType sh,ruby,python let b:comment_leader = '#'
autocmd FileType conf,fstab let b:comment_leader = '#'
autocmd FileType tex let b:comment_leader = '%'
autocmd FileType mail let b:comment_leader = '>'
autocmd FileType vim let b:comment_leader = '"'
function! CommentToggle()
execute ':silent! s/\([^ ]\)/' . escape(b:comment_leader,'\/') . ' \1/'
execute ':silent! s/^\( *\)' . escape(b:comment_leader,'\/') . ' \?' . escape(b:comment_leader,'\/') . ' \?/\1/'
endfunction
map <F7> :call CommentToggle()<CR>
autocmd文件类型c、cpp、java、scala let b:comment_leader='/'
autocmd文件类型sh,ruby,python let b:comment_leader='#'
autocmd文件类型conf,fstab let b:comment_leader='#'
autocmd文件类型tex let b:comment_leader='%
autocmd文件类型邮件let b:注释\u leader='>'
autocmd文件类型vim let b:comment_leader='“'
函数!CommentToggle()
执行“:silent!s/\([^]\)/”。转义(b:注释\u领导人“\/”)。\1/'
执行“:silent!s/^\(*\)”.转义(b:comment\u leader,\/').\?”.转义(b:comment\u leader,\/').\?/\1/'
端功能
映射:调用CommentToggle()
工作原理:
#code code
#code
#code code code
code code
code
code code code
假设我们使用#-注释
第一个命令s/\([^]\)/\\1/
搜索第一个非空格字符[^]
,并用
+自身
替换。自身替换由搜索模式中的\(..)
和替换模式中的\1
完成
第二个命令s/^\(*\)\?\?\/\1/
搜索以双注释开始的行^\(*\)\?\?
(注释之间接受0或1个空格),并用非注释部分\(*\)
(表示前面相同数量的空格)
有关vim模式的更多详细信息,请查看。有时我被扔进了一个远程盒子,我的插件和.vimrc无法帮助我,或者有时NerdCommenter搞错了(例如HTML中嵌入的JavaScript) 在这些情况下,低技术替代方案是内置的
norm
命令,它只在指定范围内的每一行运行任意vim命令。例如:
用#
进行评论:
这将在每一行的开头插入“#”。请注意,当您键入时:范围将被填充,因此它看起来真的像
:”我为我的.vimrc文件添加了一个简单的新文件,它工作得非常好,并且可以轻松扩展。您只需向注释映射及其注释引线添加一个新的文件类型
我添加了一个到普通模式和视觉模式的映射,但是你可以重新映射到你喜欢的任何模式。我只喜欢有一个“切换”样式的函数。一个可以有多个映射等
let s:comment_map = {
\ "c": '\/\/',
\ "cpp": '\/\/',
\ "go": '\/\/',
\ "java": '\/\/',
\ "javascript": '\/\/',
\ "lua": '--',
\ "scala": '\/\/',
\ "php": '\/\/',
\ "python": '#',
\ "ruby": '#',
\ "rust": '\/\/',
\ "sh": '#',
\ "desktop": '#',
\ "fstab": '#',
\ "conf": '#',
\ "profile": '#',
\ "bashrc": '#',
\ "bash_profile": '#',
\ "mail": '>',
\ "eml": '>',
\ "bat": 'REM',
\ "ahk": ';',
\ "vim": '"',
\ "tex": '%',
\ }
function! ToggleComment()
if has_key(s:comment_map, &filetype)
let comment_leader = s:comment_map[&filetype]
if getline('.') =~ "^\\s*" . comment_leader . " "
" Uncomment the line
execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
else
if getline('.') =~ "^\\s*" . comment_leader
" Uncomment the line
execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
else
" Comment the line
execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
end
end
else
echo "No comment leader found for filetype"
end
endfunction
nnoremap <leader><Space> :call ToggleComment()<cr>
vnoremap <leader><Space> :call ToggleComment()<cr>
s:comment\u map={
\“c”:“\/\/”,
\“cpp”:“\/\/”,
\“go”:“\/\/”,
\“java”:“\/\/”,
\“javascript”:“\/\/”,
\“lua”:“---”,
\“scala”:“\/\/”,
\“php”:“\/\/”,
\“python”:“#”,
\“红宝石”:“#”,
\“锈迹”:“\/\/”,
\“sh”:“#”,
\“桌面”:“#”,
\“fstab”:“#”,
\“conf”:“#”,
\“简介”:“#”,
\“bashrc”:“#”,
\“bash_简介”:“#”,
\“邮件”:“>”,
\“eml”:“>”,
\“蝙蝠”:“REM”,
\“ahk”:“;”,
\“vim”:“'”,
\“tex”:“%”,
\ }
功能!ToggleComment()
如果有\u键(s:comment\u映射和文件类型)
让comment\u leader=s:comment\u映射[&filetype]
如果getline('.')=~“^\\s*”。评论你的领导。" "
“取消对行的注释
执行“静默s/^\\(\\s*\\)”。注释\u leader。“/\\1/”
其他的
如果getline('.')=~“^\\s*”。注释
“取消对行的注释
执行“静默s/^\\(\\s*\\)”。评论你的领导。"/\\1/"
其他的
“评论这句话
执行“静默s/^\\(\\s*\\)/\\1”。注释\u leader。“/”
结束
结束
其他的
echo“未找到文件类型的注释引线”
结束
端功能
nnoremap:calltogglecomment()调用
vnoremap:calltogglecomment()调用
注:
我不在文件类型/加载中使用任何回调或挂钩,因为我发现它们比.vimrc
静态函数/map更能减慢Vim的启动速度,但这只是我的偏好。我还尝试保持它的简单性和性能。如果使用自动命令,则需要确保将它们放入自动命令组或cal每次加载的文件都会多次将lback添加到文件类型中,这会导致性能下降。从这里的答案开始,我
1. visually select the text as before (or type gv to re-select the previous selection)
2. :norm x
:norm ^x
vnoremap <C-n> :norm
let s:comment_map = {
\ "c": '\/\/',
\ "cpp": '\/\/',
\ "go": '\/\/',
\ "java": '\/\/',
\ "javascript": '\/\/',
\ "lua": '--',
\ "scala": '\/\/',
\ "php": '\/\/',
\ "python": '#',
\ "ruby": '#',
\ "rust": '\/\/',
\ "sh": '#',
\ "desktop": '#',
\ "fstab": '#',
\ "conf": '#',
\ "profile": '#',
\ "bashrc": '#',
\ "bash_profile": '#',
\ "mail": '>',
\ "eml": '>',
\ "bat": 'REM',
\ "ahk": ';',
\ "vim": '"',
\ "tex": '%',
\ }
function! ToggleComment()
if has_key(s:comment_map, &filetype)
let comment_leader = s:comment_map[&filetype]
if getline('.') =~ "^\\s*" . comment_leader . " "
" Uncomment the line
execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
else
if getline('.') =~ "^\\s*" . comment_leader
" Uncomment the line
execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
else
" Comment the line
execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
end
end
else
echo "No comment leader found for filetype"
end
endfunction
nnoremap <leader><Space> :call ToggleComment()<cr>
vnoremap <leader><Space> :call ToggleComment()<cr>
" these lines are needed for ToggleComment()
autocmd FileType c,cpp,java let b:comment_leader = '//'
autocmd FileType arduino let b:comment_leader = '//'
autocmd FileType sh,ruby,python let b:comment_leader = '#'
autocmd FileType zsh let b:comment_leader = '#'
autocmd FileType conf,fstab let b:comment_leader = '#'
autocmd FileType matlab,tex let b:comment_leader = '%'
autocmd FileType vim let b:comment_leader = '"'
" l:pos --> cursor position
" l:space --> how many spaces we will use b:comment_leader + ' '
function! ToggleComment()
if exists('b:comment_leader')
let l:pos = col('.')
let l:space = ( &ft =~ '\v(c|cpp|java|arduino)' ? '3' : '2' )
if getline('.') =~ '\v(\s*|\t*)' .b:comment_leader
let l:space -= ( getline('.') =~ '\v.*\zs' . b:comment_leader . '(\s+|\t+)@!' ? 1 : 0 )
execute 'silent s,\v^(\s*|\t*)\zs' .b:comment_leader.'[ ]?,,g'
let l:pos -= l:space
else
exec 'normal! 0i' .b:comment_leader .' '
let l:pos += l:space
endif
call cursor(line("."), l:pos)
else
echo 'no comment leader found for filetype'
end
endfunction
nnoremap <Leader>t :call ToggleComment()<CR>
inoremap <Leader>t <C-o>:call ToggleComment()<CR>
xnoremap <Leader>t :'<,'>call ToggleComment()<CR>
map ) I# <Esc>j
map ( k^2x
map ) I// <Esc>j
map ( k^4x
set cindent
set formatoptions=tcqr
'v'
'j' repeatedly or e.g 4j to select 4 row
'gc'
'gc'
nnoremap <silent> cc :set opfunc=CommentOut<cr>g@
vnoremap <silent> cc :<c-u>call CommentOut(visualmode(), 1)<cr>
nnoremap <silent> cu :set opfunc=Uncomment<cr>g@
vnoremap <silent> cu :<c-u>call Uncomment(visualmode(), 1)<cr>
function! CommentOut(type, ...)
if a:0
silent exe "normal! :'<,'>s/^/#/\<cr>`<"
else
silent exe "normal! :'[,']s/^/#/\<cr>'["
endif
endfunction
function! Uncomment(type, ...)
if a:0
silent exe "normal! :'<,'>s/^\\(\\s*\\)#/\\1/\<cr>`<"
else
silent exe "normal! :'[,']s/^\\(\\s*\\)#/\\1/\<cr>`["
endif
endfunction
cd ~/.vim/bundle
git clone git://github.com/tpope/vim-commentary.git
Plug 'tpope/vim-commentary'
Plugin 'tpope/vim-commentary'
command! -range -nargs=1 Comment :execute "'<,'>normal! <C-v>0I" . <f-args> . "<Esc><Esc>"
1
2
//1
//2
let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.[ch] let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.cpp let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.py let b:commentChar='#'
autocmd BufNewFile,BufReadPost *.*sh let b:commentChar='#'
function! Docomment ()
"make comments on all the lines we've grabbed
execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
endfunction
function! Uncomment ()
"uncomment on all our lines
execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
endfunction
function! Comment ()
"does the first line begin with a comment?
let l:line=getpos("'<")[1]
"if there's a match
if match(getline(l:line), '^\s*'.b:commentChar)>-1
call Uncomment()
else
call Docomment()
endif
endfunction
vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>
# Practice in Vim
# Practice in Vim
# Practice in Vim
# Practice in Vim
# Practice in Vim
# Practice in Vim
# Practice in Vim
Practice in Vim
Practice in Vim
Practice in Vim
Practice in Vim
Practice in Vim
Practice in Vim
Practice in Vim