Vim:在当前光标位置插入文件中的文本

Vim:在当前光标位置插入文件中的文本,vim,Vim,要在当前Vim缓冲区中插入文件中的文本,我使用:r filename在光标下方插入文本,或使用:0r filename插入第一行 如何在[光标]所在的文件中插入内容 Actual line with some coding [Cursor] // TODO for later version Line below actual line ... 插入一个换行符,读取文件,然后取出换行符…我建议Ctrl-R Ctrl-O=join(readfile('filename','b'),“\n”

要在当前Vim缓冲区中插入文件中的文本,我使用
:r filename
在光标下方插入文本,或使用
:0r filename
插入第一行

如何在[光标]所在的文件中插入内容

Actual line with some coding [Cursor]  // TODO for later version  
Line below actual line ...

插入一个换行符,读取文件,然后取出换行符…

我建议Ctrl-R Ctrl-O
=join(readfile('filename','b'),“\n”)

其他解决方案:

可能在另一个窗口中打开另一个文件,使用
:%yh
h
是一个寄存器名),在原始文件中,在正常模式下使用
“hp
”hp
,或在插入模式下,使用Ctrl-R Ctrl-O h

”将其放入/.vimrc
'在插入模式下,按n
"
imap,n=展开(“%:p”)
阅读更多信息。

此操作有效(将光标处的文件名插入当前文档):

:r

要使用的是
:-1read
-1
是当前行号减去1)

我使用以下键绑定轻松插入我拥有的各种模板:
nnoremap in:-1read~/.vim/templates/

请注意,像
nnoremap in:read~/.vim/templates/
这样的东西在站在第1行时将不起作用。这真的很奇怪,可能是vim中的一个bug(我使用的是7.4.x)。

用实际代码扩展公认的答案,因为我尝试了这个建议,效果很好; 下面是插入一个小php代码段的示例:

`nnoremap <leader>php a<CR><ESC>:.-1read $SNIPPETS/php<CR>I<BS><ESC>j0i<BS><ESC>l`
无法在光标前粘贴文本

以及:

`nnoremap php a:-1read$SNIPPETS/phpIj0il`
可以在光标后粘贴文本。反之亦然。我已经使“光标前”更容易触发,因为我在在线粘贴时更经常使用它


其他注释 如果您正在读取一个您希望经常使用的文件,而该文件值得为其设置密钥映射(即从文件中读取一个片段),则此解决方案非常有用。如果您只是想随时读取一个随机文件,则此解决方案并没有真正的帮助,因为您还没有准备好密钥映射


因为它是非常公式化的,我相信可以定义一个函数,将文件名作为参数,然后做同样的事情。虽然我从未用vimscript编写过函数,但是如果有人想编辑这个答案以包含该解决方案,我敦促他们这样做!

这并不是一直在问的问题d for.OP不希望插入当前文件名,但希望插入另一个文件内容。这更像是在光标下方。
:-1read
可用于将文本放置在光标上方(这会让您感觉文本位于光标位置)。这两种解决方案都不在当前光标位置插入文本。
:r
在当前行下方的行上插入,而
:-1read
在当前行上方的行上插入。问题是如何在当前光标位置插入。或者只使用
:-1read
:)这与
p
类似de>P,这两种行为都是合乎逻辑的,但您希望能够以两种方式进行。这不是答案。这是对问题的重新表述。答案会告诉您如何进行操作。这对于vim脚本/宏来说尤其有趣。这是不正确的,因为“当前行号减去1”不是光标所在的位置(除非光标位于该行的第1列。
    :r <cfile>
`nnoremap <leader>php a<CR><ESC>:.-1read $SNIPPETS/php<CR>I<BS><ESC>j0i<BS><ESC>l`
`nnoremap [KEY SEQUENCE] a<CR><ESC>:.-1read [FILE PATH]<CR>I<BS><ESC>j0i<BS><ESC>l`
`nnoremap <leader>php i<CR><ESC>:.-1read $SNIPPETS/php<CR>I<BS><ESC>j0i<BS><ESC>l`
`nnoremap <leader><leader>php a<CR><ESC>:.-1read $SNIPPETS/php<CR>I<BS><ESC>j0i<BS><ESC>l`