$
)替换当前行第六列中的字符,但是我希望光标保持在调用该函数之前的位置。 所以我尝试存储当前列,执行更改,然后返回以下功能:
function! DollarSplit()
let col_number=col(".") "stores the current column number of the cursor
normal! 6|r$ " replaces the 6th caracter in line with a $
execute col_number."|"
endfunction
我可能是对
execute
命令有误解...或者我应该创建一个包含要执行的命令的字符串? #1 楼
您应该使用getpos()
:要保存在变量中的位置:光标的位置。
并进行恢复:
let save_pos = getpos(".")
这里的第一个参数表示您将移动当前位置的标记光标的位置(因此,当前位置),第二个位置是标记的位置(之前保存的位置)。
call setpos('.', save_pos)
有关更多详细信息,请参见:
getpos()
和"."
有关
:h getpos()
用法的更多详细信息:该函数将使用字符串并执行它。您的字符串只能是双引号或变量内容之间的硬编码字符。编写
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
如果您在12号列的扩展字符串将为
:h setpos()
。 Execute会尝试执行此命令,但由于execute
不是vimscript函数而是正常模式命令而无法运行。要从vimscript中执行它,您必须说“执行该命令,就像我在正常模式下键入过的字符,这就是正常使用的语言。要使您的
12|
呼叫正常工作,您必须将12|
关键字添加到扩展字符串中,例如:execute col_number."|"
#2 楼
此功能还保留您的搜索注册。因此您可以将命令作为参数传递给它。if !exists('*Preserve')
function! Preserve(command)
try
" Preparation: save last search, and cursor position.
let l:win_view = winsaveview()
let l:old_query = getreg('/')
silent! execute 'keepjumps' . a:command
finally
" try restore / reg and cursor position
call winrestview(l:win_view)
call setreg('/', l:old_query)
endtry
endfunction
endif
一些解释
let .......... used to set a variable
l:somevar .... local variable
winsaveview() get information about window view
winrestview(lwinview) restores window view to its last status
getreg('/') used to store the last search in a variable
keepjumps used to performe any change without change jumplis
. a:command concatenates any given command with keepjumps
例如:
"Reident file without moving cursor position
:call Preserve('normal! gg=G')
"Reindent command using 'Preserve()'
command! -nargs=0 Reindent :call Preserve('exec "normal! gg=G"')
"If you have any change log at your file header
:call Preserve('1,5s/Last Change: \zs.*/\=strftime("%c")/e')
"Close all buffers but current one
" https://bitbucket.org/snippets/sergio/9nbyGy
command! BufOnly silent! call Preserve("exec '%bd|e#|bd#'")
来源:
https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps -您的州/
评论
欢迎来到我们的网站!回答时,请尝试在回答中给出一些解释,而不仅仅是指向其他页面的链接。链接可能会消失,并且可能有很多不相关的信息需要分类。
– Tumbler41
16-12-21在23:12
正如我在SO副本中所说的那样,恢复应该最终完成。否则,如果a:命令失败,则将无法恢复任何内容。
–卢克·赫米特(Luc Hermitte)
17年9月1日14:32在
我刚刚修复了我提到的@Luc Hermitte的功能
– SergioAraujo
18年1月2日,12:34
很好的例子-非常有用。
–查理·达萨斯(Charlie Dalsass)
18年7月12日在19:45
评论
感谢您提供此解决方案(这是我将要使用的解决方案),但是还有其他方法可以使用我的“ col_number”变量吗?那将使我更好地了解如何执行/正常工作。
– Feffe
16年5月12日在15:29
@Feffe:我的更新应该澄清这一点:-)
–statox♦
16年5月12日在15:36