当我删除标记所在的行时,使vim保持标记
当我删除标记所在的行时,如何让vim保留标记(即,自动将标记移动到标记行正上方或正下方的行)可能最简单的方法是在不希望删除标记时使用大写字母标记。如果标记所在的行被删除,它将移动到下一行 另一个选项是当我删除标记所在的行时,使vim保持标记,vim,Vim,当我删除标记所在的行时,如何让vim保留标记(即,自动将标记移动到标记行正上方或正下方的行)可能最简单的方法是在不希望删除标记时使用大写字母标记。如果标记所在的行被删除,它将移动到下一行 另一个选项是lockmarks命令lockmarks执行命令并将大多数标记锁定在其当前行号,直到命令完成。如果您想经常这样做,您可能需要添加一些映射,这些映射将为您提供lockmarks,例如,这将dd转化为标记保留: nnoremap dd :lockmarks normal! dd<cr> 然
lockmarks
命令lockmarks
执行命令并将大多数标记锁定在其当前行号,直到命令完成。如果您想经常这样做,您可能需要添加一些映射,这些映射将为您提供lockmarks
,例如,这将dd
转化为标记保留:
nnoremap dd :lockmarks normal! dd<cr>
然后,您必须为您经常使用的每个删除操作定义这样的映射
因此,可能使用大写字母标记会更容易。您只需记住使用它们。对@Kurt-Hutchinson答案的一个补充:有可能定义运算符函数。在这种情况下,您不需要为每个删除命令定义映射,而是重新定义
d
:
let s:typetochar={
\ 'char': 'v',
\ 'line': 'V',
\'block': "\<C-v>",
\}
function! DeleteOperator(type)
execute 'lockmarks normal! `["'.v:register.'d'.s:typetochar[a:type].'`]'
endfunction
function! s:Delete()
set opfunc=DeleteOperator
return 'g@'
endfunction
nnoremap <expr> d <SID>Delete()
nnoremap <expr> dd <SID>Delete().'g@'
vnoremap d :<C-u>lockmarks normal! gvd<CR>
s:typetochar={
\“char”:“v”,
\“行”:“V”,
\'块':“\”,
\}
作用DeleteOperator(类型)
执行“锁定标记”正常`[“.v:register.d”.s:typetochar[a:type].''''
端功能
函数!s:Delete()
set opfunc=DeleteOperator
返回'g@'
端功能
nnoremap d Delete()
nnoremap dd Delete().“g@”
vnoremap d:锁定标记正常!gvd
注意dd
映射:由于d
实际使用的是g@
,因此应该有dg@
(扩展为g@g@
)在其中键入dd
。因此,为了使用cleanerdd
,必须创建映射
nnoremap dd :<c-u>execute 'lockmarks normal! ' . v:count . 'dd'<cr>
let s:typetochar={
\ 'char': 'v',
\ 'line': 'V',
\'block': "\<C-v>",
\}
function! DeleteOperator(type)
execute 'lockmarks normal! `["'.v:register.'d'.s:typetochar[a:type].'`]'
endfunction
function! s:Delete()
set opfunc=DeleteOperator
return 'g@'
endfunction
nnoremap <expr> d <SID>Delete()
nnoremap <expr> dd <SID>Delete().'g@'
vnoremap d :<C-u>lockmarks normal! gvd<CR>