我试图在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"
由于
答案 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)