如果它存在于vim中,则删除行开头的特定char
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果它存在于vim中,则删除行开头的特定char相关的知识,希望对你有一定的参考价值。
这里只是另一个vim源代码注释问题。我有我的python源代码文件的映射:
map <C-C> <Home>i#<Esc>
imap <C-C> <Home>#<Esc> i
在Ctrl-C上,如果要对其进行注释,则将#放在开头。这大大提高了生产力。但是当我想取消注释行时,我必须手动执行此操作,这意味着转到每个注释行的第一个字符并将其删除。这非常烦人。乍一看,我可以将Home-x绑定到某个键上,但我偶尔可以删除一个无辜的空间或其他东西,以防万一我想错,并在线上执行此操作,在开头没有#字符。我首先尝试使用:%s //替换单行,但这会产生不必要的影响 - 它会触发搜索并在其他行中突出显示“模式”。如果是单个#字符,则表示失败。任何人都可以建议如何删除当前行开头的指定字符,如果它存在则不执行任何操作,如果没有,则不使用模式替换?
我创建了一个简单的函数来切换注释:
function! ToggleComment()
let l:pos = col('.')
if getline('.') =~ 'v(s+| +)?#'
exec 'normal! _"_x'
let l:pos -= 1
else
exec 'normal! I#'
let l:pos += 1
endif
call cursor(line("."), l:pos)
endfunction
nnoremap <Leader>t :call ToggleComment()<CR>
inoremap <Leader>t <C-o>:call ToggleComment()<CR>
我推荐Tim Pope的插件vim-commentary,因为它更完整。但当然,我们的想法让你们一瞥我们可以用vimscript取得多大的成就。
here可以看到另一种方法,它不需要保存windowview并切换其他语言的注释
任何人都可以建议如何删除当前行开头的指定字符,如果它存在则不执行任何操作,如果没有,则不使用模式替换?
一个解决方案是(假设你的光标在使用地图时位于#
右侧的任何位置):
map <c-c> mmF#x`m
更通用的解决方案是使用替换和histdel()
删除最后一个搜索模式:
function! DelComment()
s/^( *)#/1/
call histdel("search", -1)
let @/ = histget("search", -1)
endfunction
执行该功能后(通过选择它并键入:@"
),您可以将其映射到<c-c>
:
map <silent> <c-c> mm:silent! call DelComment()<cr>`m
我喜欢在执行地图后使用函数周围的标记来保持光标位置。随意删除上面的地图中的mm
和`m
。
以上是关于如果它存在于vim中,则删除行开头的特定char的主要内容,如果未能解决你的问题,请参考以下文章