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

时间:2011-02-09 10:23:40

标签: vim

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

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

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

6 个答案:

答案 0 :(得分:16)

这样可以(将名称在光标处的文件插入到当前文档中):

    :r <cfile>

答案 1 :(得分:7)

插入换行符,读取文件,然后取出换行符......

答案 2 :(得分:2)

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

其他解决方案:

可能在另一个窗口中打开其他文件,使用:%yhh是注册名称)并在原始文件中,在正常模式下使用"hp"hP或者在插入模式下, Ctrl-R Ctrl-O h

答案 3 :(得分:1)

使用实际代码扩展已接受的答案,因为我尝试了这个建议并且效果很好;

以下是一个有关插入一个小小的PHP片段的例子:

`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:我想在按下此组合键时触发命令序列。在我的情况下,<leader>,,因此我键入,php来触发命令。

现在命令,一点一滴:

a<CR><ESC>:进入插入模式(光标之后),插入换行符,返回正常模式。

:.-1read <file><CR>:这会在当前行上方的行中输入所需的文件。

I<BS><ESC>:跳到行的开头,删除换行符,返回正常模式。

j0i<BS><ESC>l:向下走一行(到你最初所在行的其余部分),跳到开头,进入插入模式,删除换行符,返回正常模式。

l:将光标定位在粘贴文件的右侧(这使得命令的工作方式更像您期望的那样)。

注释

您可以选择是在光标之前还是之后粘贴。我在此示例中选择粘贴光标后,因为p命令通常用于粘贴被拉动的文本。或者,要在光标前粘贴,您应该将命令开头的a更改为i。您可以专门使用其中一个,也可以将它们绑定到不同但相关的键序列。例如:

`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`

可以在光标后粘贴文本。或相反亦然。我已经在光标之前制作了#39;更容易触发,因为我在线上粘贴时更经常使用它。

其他说明

此解决方案主要用于从您希望经常使用的文件中读取,以及为其设置密钥映射(即从文件中读取片段)。如果您只是想在随时准备好读取密钥映射的情况下阅读随机文件,这并不是真正有用。

由于它非常公式化,我确信可以定义一个将文件名作为参数并执行相同操作的函数。我从来没有在vimscript中编写过函数,但如果有更多人知道更喜欢编辑这个答案以包含该解决方案 - 我敦促他们这样做!

答案 4 :(得分:-1)

您要使用的是:.-1read <file>.-1是当前行号减1)。

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

请注意,nnoremap <Leader>in <Up>:read ~/.vim/templates/这样的内容会在 时排在第1行。这真的很奇怪,可能是Vim中的一个错误(我使用的是7.4。 x)的

答案 5 :(得分:-2)

" put this in your ~/.vimrc
" in insert mode press ,n
"
imap ,n <c-r>=expand("%:p")<cr>

wikia中阅读更多内容。