gpt4 book ai didi

linux - vim 函数 "update timestamp"事件 "BufWrite": to be improved

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:33 27 4
gpt4 key购买 nike

该用例由全世界所有 (vim) 开发人员共享(恕我直言):我们想在每个写入操作上更新一个标签和一个时间戳源文件。在 Barry Arthur 的帮助下,我的尝试是这样的:

每次写入更新的字符串示例

# 2013-01-09 01:04:31.0 +0100 / Me <me@domain.tld>

vimrc代码

" if not maped, :x don't call UpdateTimestamp()
map :x :wq
function! UpdateTimestamp()
let old_pos = getpos('.')
let old_search = histget("search", -1)
g/^\(#\|\/\/\)\s\+\d\{4\}-\d\{2\}-\d\{2\}\s\+\d\{2\}:\d\{2\}:\d\{2\}\.\d\+\s\++\d\{4\}\s\+\/\s\+Me <me@domain.tld>.*/s/.*/\="# " . strftime('%F %H:%M:%S.0 %z') . " \/ Me <me@domain.tld>"/
exe "normal /".old_search
call setpos('.', old_pos)
endfunction

au BufWrite * call UpdateTimestamp()

Unresolved 问题

  • 更新标签时不应修改撤消历史记录(如果可能)
  • 写入时屏幕位置发生变化
  • 当找不到模式时,屏幕上会显示一些不需要的错误

问题

简单:如何解决这些问题?

最佳答案

  • 回复:更新标签时不应修改历史
    你的意思是撤销历史,对吧?这违背了 Vim 的设计。每一个变化都需要表现出来。最好的做法是 :undojoin,但我会觉得这很困惑。

  • 回复:写入时屏幕位置发生变化
    您需要使用 winsaveview()/winrestview() 而不仅仅是 setpos()

  • 回复:当找不到模式时,屏幕上会显示一些不需要的错误
    :substitute 的末尾传递 /e 标志,并将 :silent! 添加到 :global 之前。

PS:我认为 vim.org 上有一些插件可以满足您的需求。你尝试过其中的一些吗?

关于linux - vim 函数 "update timestamp"事件 "BufWrite": to be improved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com