當我刪除標記所在的行時,如何獲得vim以保存標記(即,自動將標記移動到標記行上方或下方的行中)當我刪除標記所在的行時,使vim保留標記
2
A
回答
4
也許最簡單的方法是在不希望它們被刪除時使用大寫字母標記。如果標記所在的行被刪除,它將被移動到下一行。
另一個選項是lockmarks
命令。 lockmarks
採用命令運行並將大多數標記鎖定在其當前行號,直到命令完成。如果你想這樣做的時候,你可能需要一些映射那會lockmarks
你,例如這原來dd
加入到標記保護:
nnoremap dd :lockmarks normal! dd<cr>
或
nnoremap dd :lockmarks delete<cr>
問題是你失去了指定一個計數爲dd
的能力。這可以通過使用v:count
要解決這個問題,但後來我們就需要execute
來獲取插值:
nnoremap dd :<c-u>execute 'lockmarks normal! ' . v:count . 'dd'<cr>
然後你必須定義你經常使用的每個刪除操作這樣的映射。
因此,可能使用大寫字母標記將會更容易。你只需要記住使用它們。
1
@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 '[email protected]'
endfunction
nnoremap <expr> d <SID>Delete()
nnoremap <expr> dd <SID>Delete().'[email protected]'
vnoremap d :<C-u>lockmarks normal! gvd<CR>
注意dd
映射:爲d
實際使用[email protected]
,應該有[email protected]
(擴展到[email protected]@
)你在那裏輸入dd
。所以爲了使用清潔劑dd
你必須創建一個映射。
相關問題
- 1. 刪除標記時刪除標記
- 2. XSLT刪除標記但保留內容
- 3. 刪除HTML標記並保留文本
- 4. 添加新標記時刪除標記?
- 5. 刪除除標記外的所有html標記
- 6. vim:標記被刪除/丟失
- 7. yang vim中的所有標記行
- 8. 使用標記刪除所有ImageView
- 9. 刪除/添加標記留下工件
- 10. 所見即所得刪除標記
- 11. Xhtml刪除格式標記並保留XSLT 2.0的內容
- 12. libxml2保留空標記
- 13. 如何在使用XSLT重命名標記時保留XML標記值
- 14. 從保存的txt刪除「」標記
- 15. 單擊刪除當前標記並在點擊時添加一個新標記
- 16. 刪除XML標記
- 17. pasteHTML刪除標記
- 18. 刪除Google標記
- 19. 清除除了所選標記之外的所有標記
- 20. 使用複選框標記行刪除
- 21. 刪除文件編碼標記但保留其編碼
- 22. 保留錨定標記並刪除其他超鏈接
- 23. 谷歌地圖3.0 - 有時刪除標記後,他們留在
- 24. 如何保留標記標籤?
- 25. 在保留換行符和段落結構的同時保留標記
- 26. 在多行中刪除乳膠標記
- 27. 當我嘗試刪除標記時,Google Maps API返回'undefined'?
- 28. 如何在保留非標記HTML標記的同時將HTML轉換爲Markdown?
- 29. PHP刪除所有表tr tr標記
- 30. Delphi FMX MapView - 刪除所有標記