Buffer 从函数将文本插入当前缓冲区

Buffer 从函数将文本插入当前缓冲区,buffer,vim,Buffer,Vim,我很难找到这方面的文档。如何在vim函数中从当前缓冲区读取/写入文本 更具体地说,如果我的缓冲区包含单词foo-bar,如何编写一个函数来用cat覆盖单词bar,以便最终我的缓冲区包含foo-cat?,您可以在函数中使用substituteex命令。比如说 function! ReplaceBar() :%s/bar/cat/g endfunction 这定义了一个函数。%字符表示对整个缓冲区进行操作。这将搜索bar,将其替换为cat,并且g标志将替换一行中的每个实例,而不仅仅是第一个实

我很难找到这方面的文档。如何在vim函数中从当前缓冲区读取/写入文本


更具体地说,如果我的缓冲区包含单词
foo-bar
,如何编写一个函数来用
cat
覆盖单词
bar
,以便最终我的缓冲区包含
foo-cat

,您可以在函数中使用
substitute
ex命令。比如说

function! ReplaceBar() 
  :%s/bar/cat/g
endfunction
这定义了一个函数。
%
字符表示对整个缓冲区进行操作。这将搜索
bar
,将其替换为
cat
,并且
g
标志将替换一行中的每个实例,而不仅仅是第一个实例

您可以通过键入
:call ReplaceBar()
并按enter键来运行此函数。通常,定义一个执行此类工作的函数,然后定义一个调用该函数的命令比较方便:

command! -nargs=0 Bar call ReplaceBar()
可以通过键入
:Bar来运行该命令。要访问行,可以使用
getline()
函数
setline()
更新缓冲区中的那些行。同样,通过
append()
插入新行


后者也可以用
:put={variable or expression}
完成,并用
:substitute
替换。什么更好取决于特定的用例。前者的好处是,较低级别的函数不会破坏诸如表达式寄存器、上次使用的搜索模式、搜索历史等内容。

在neovim中,它们具有
nvim\u put
。举几个例子:

:call nvim_put(['cat'], 'c', v:false, v:true) ; insert 'cat' right where the cursor is, as if you typed `:normal! icat`
:call nvim_put(['cat'], 'l', v:true, v:true) ; insert 'cat' on the next line

其他人已经很好地介绍了
:put
的使用,所以我自己就不介绍了。

:help eval
:help函数