问题
I'm having a hard time finding the documentation for this. How do I read/write text from the current buffer in my vim functions?
More concretely, if my buffer contains the words foo bar
how would write a function to overwrite the word bar
with cat
so that in the end my buffer contains foo cat
?
回答1:
You can use the substitute
ex command inside a function. For example
function! ReplaceBar()
:%s/bar/cat/g
endfunction
This defines a function. The %
character means operate on the entire buffer. This searches for bar
, replaces it with cat
, and the g
flag replaces every instance on a line, not just the first.
You can run this function by typing :call ReplaceBar()
and hitting enter. Often it's convenient to define a function that does this kind of work, then define a command that calls it:
command! -nargs=0 Bar call ReplaceBar()
That command can be run by typing :Bar
.
回答2:
To access line(s), you can use the getline()
function. setline()
updates those lines in the buffer. Likewise, new lines are inserted via append()
.
The latter can also be done with :put ={variable or expression}
, and replacements with :substitute
. What is better depends on the particular use case. The benefit of the former, lower-level functions is that they don't clobber stuff like the expression register, last used search pattern, search history, etc.
回答3:
In neovim, they have nvim_put
. A few examples:
: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
Others have covered the use of :put
pretty well, so I won't cover it myself.
来源:https://stackoverflow.com/questions/24168253/insert-text-into-current-buffer-from-function