如何在一行中执行操作(例如
dd
)而不将光标移动到Vim中的该行?
假设我想在第n
行执行某些操作(例如dd
),并且光标当前在第m
行。
通常,我会这样做:
n
(:n
)n
(dd
)m
(:m
)(+/- 1偏移)确实要删除n
行而不用:
两次移动光标吗?
答案 0 :(得分:4)
:nd
(n
是行号)后跟ctrl+o
。
这是我仍在挣扎的带有vim的怪癖之一。我觉得:range
命令根本不应该移动光标。
答案 1 :(得分:0)
您可以定义一个“保留功能”,甚至可以使它成为这样的命令:
if !exists('*Preserve')
function! Preserve(command)
try
let l:win_view = winsaveview()
"silent! keepjumps keeppatterns execute a:command
silent! execute 'keeppatterns keepjumps ' . a:command
finally
call winrestview(l:win_view)
endtry
endfunction
endif
command! -nargs=1 Preserve call Preserve(<f-args>)
只要您使用相对数字,就可以运行:
:Preserve +13d
功能保留可让您执行许多其他操作,例如:
" define a command for reindenting the code without moving the cursor
command! -nargs=0 Reindent :call Preserve('exec "normal! gg=G"')
" Remove trailing whitespaces
call Preserve(":%s,\\s\\+$,,e")
来源: + https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/ + https://stackoverflow.com/a/3213800/2571881