VIM autocmd会破坏默认寄存器

时间:2014-09-23 13:32:57

标签: vim autocmd

我试图在Vim中更新包含特定文件中文件名的一些文本行。为此,我已在我的.vimrc中添加了这个:

let logs_pat = "/ARCHIVE/logs/db_agent.log*"
au! BufEnter *_search.txt execute "/\\[DBA_LOGS\\]/,$d | $put = '[DBA_LOGS]' | $r!ls -t " . logs_pat . " | head "

除了一些工件外它工作正常。 问题是关于如何消除这些工件

每当我进入带文件* _search.txt的缓冲区时, 1)寄存器的内容""由autocmd添加到文件的文本替换为文件* _search.txt 2)在vim状态行上显示一条消息:"另外10行"或者"搜索命中BOTTOM,继续在TOP"

由于

1 个答案:

答案 0 :(得分:4)

/\\[DBA_LOGS\\]/,$d命令删除默认寄存器中的行范围。为避免这种情况,请附加黑洞寄存器_)。要取消隐藏消息,请添加:silent

au! BufEnter *_search.txt execute "silent /\\[DBA_LOGS\\]/,$delete _ | $put = '[DBA_LOGS]' | silent $r!ls -t " . logs_pat . " | head "

要保持原始光标位置,可以使用以下任一方式将其包装:

:mark z
...
:normal! g`z

:let pos = getpos('.')
...
:call setpos('.', pos)