我编写了一个删除文件中多余空格的函数:
let g:trim_whitespace = 1
function! TrimWhitespace()
if g:trim_whitespace
normal :%s/\s\+$//e
endif
endfunction
问题是替换命令后光标位置设置为[1, 1]
。我根本不希望光标移动,所以我试图保存光标位置并在替换命令后重置它:
let a:cursor_pos = getpos(".")
normal :%s/\s\+$//e
exec cursor(a:cursor_pos[1], a:cursor_pos[2])
但仍然会发生完全相同的事情,就好像对cursor
的调用没有效果一样。有什么想法吗?
答案 0 :(得分:8)
:execute
用于评估 Ex命令,但cursor()
是内置的功能。您需要使用:call cursor(a:cursor_pos[1], a:cursor_pos[2])
调用它。此外,您的函数中不需要:normal
来执行:substitute
命令;只需写下%s/\s\+$//e
。setpos()
函数,调用起来比较简单::call setpos('.', a:cursor_pos)
winsaveview()
/ winrestview()
(包括光标位置)。答案 1 :(得分:5)
尝试放置标记:
mark `
%s/\s\+$//e
normal ``