Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我删除标记所在的行时,使vim保持标记_Vim - Fatal编程技术网

当我删除标记所在的行时,使vim保持标记

当我删除标记所在的行时,使vim保持标记,vim,Vim,当我删除标记所在的行时,如何让vim保留标记(即,自动将标记移动到标记行正上方或正下方的行)可能最简单的方法是在不希望删除标记时使用大写字母标记。如果标记所在的行被删除,它将移动到下一行 另一个选项是lockmarks命令lockmarks执行命令并将大多数标记锁定在其当前行号,直到命令完成。如果您想经常这样做,您可能需要添加一些映射,这些映射将为您提供lockmarks,例如,这将dd转化为标记保留: nnoremap dd :lockmarks normal! dd<cr> 然

当我删除标记所在的行时,如何让vim保留标记(即,自动将标记移动到标记行正上方或正下方的行)

可能最简单的方法是在不希望删除标记时使用大写字母标记。如果标记所在的行被删除,它将移动到下一行

另一个选项是
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
。因此,为了使用cleaner
dd
,必须创建映射

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>