要从当前Vim缓冲区中的文件插入文本,我使用:r filename
插入光标下方的文本或:0r filename
插入第一行。
如何插入[光标]所在文件的内容?
Actual line with some coding [Cursor] // TODO for later version
Line below actual line ...
答案 0 :(得分:16)
这样可以(将名称在光标处的文件插入到当前文档中):
:r <cfile>
答案 1 :(得分:7)
插入换行符,读取文件,然后取出换行符......
答案 2 :(得分:2)
我建议 Ctrl-R Ctrl-O = join(readfile('filename','b'), "\n")
其他解决方案:
可能在另一个窗口中打开其他文件,使用:%yh
(h
是注册名称)并在原始文件中,在正常模式下使用"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中阅读更多内容。