我想知道在Vim中是否有任何键映射允许我缩进某些行代码(是否这些行已在可视模式下选择,或在当前光标位置上方/下方的n行)。
所以基本上可以转换以下内容
def my_fun(x, y):
return x + y
to
#def my_fun(x, y):
# return x + y
我可以使用#或“”来注释掉相关的行。理想情况下,如果给定的行已被注释掉,我还希望使用相同的键映射来取消注释。
我想知道在Vim中是否有任何键映射允许我缩进某些行代码(是否这些行已在可视模式下选择,或在当前光标位置上方/下方的n行)。
所以基本上可以转换以下内容
def my_fun(x, y):
return x + y
to
#def my_fun(x, y):
# return x + y
我可以使用#或“”来注释掉相关的行。理想情况下,如果给定的行已被注释掉,我还希望使用相同的键映射来取消注释。
当前回答
我在我的.vimrc中有以下行:
" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap <C-N><C-N> mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap <C-N><C-N> <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap <C-N><C-N> mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n
" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap <C-N>n mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap <C-N>n <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap <C-N>n mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n
快捷键保留您的光标位置和注释,只要它们以#开头(在#后面有空格)。例如:
# variable x
x = 0
后评论:
# variable x
#x = 0
uncomennting之后:
# variable x
x = 0
其他回答
用ShiftV突出显示你的区块
用::norm i#(小写i)注释所选的块
要取消注释,请再次突出显示您的块,并使用::norm ^x取消注释
norm命令对每一行执行一个操作。注释会在每行开头插入一个#,取消注释会删除这个#。
我在我的.vimrc中有以下行:
" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap <C-N><C-N> mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap <C-N><C-N> <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap <C-N><C-N> mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n
" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap <C-N>n mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap <C-N>n <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap <C-N>n mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n
快捷键保留您的光标位置和注释,只要它们以#开头(在#后面有空格)。例如:
# variable x
x = 0
后评论:
# variable x
#x = 0
uncomennting之后:
# variable x
x = 0
不需要插件或映射。试试内置的“norm”命令,它可以在每个选定的行上执行您想要的任何命令。
添加#注释
1. shift V to visually select lines
2. :norm i#
删除#注释
1. visually select region as before
2. :norm x
如果你的注释是缩进的,你可以这样做:norm ^x
注意,这些只是普通的vim命令,前面加了“:norm”,以便在每行上执行它们。
关于使用“norm”命令的更详细的答案在这里
在Vim中注释/取消注释行有什么快速方法?
CtrlK评论(可视模式):
vnoremap <silent> <C-k> :s#^#\##<cr>:noh<cr>
取消注释(可视模式)的CtrlU:
vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
NERDcommenter是一个优秀的注释插件,它可以自动检测一些文件类型及其相关的注释字符。使用病原体安装非常容易。
注释<leader>cc。用<leader>cu.取消注释。并切换注释<leader>c<space>。
(vim中默认的<leader>键是\)