Vim: вставить текст из файла в текущей позиции курсора - PullRequest
26 голосов
/ 09 февраля 2011

Чтобы вставить текст из файла в текущий буфер Vim, я использую :r filename для вставки текста под курсором или :0r filename для вставки в первой строке.

Как вставить содержимое файла, в котором находится [Курсор]?

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

Ответы [ 6 ]

16 голосов
/ 30 сентября 2013

Это работает (вставляет файл, имя которого находится на курсоре к текущему документу):

    :r <cfile>
7 голосов
/ 09 февраля 2011

Вставить разрыв строки, прочитать файл, а затем извлечь разрыв строки ...

2 голосов
/ 09 февраля 2011

Я предлагаю Ctrl-R Ctrl-O = join(readfile('filename','b'), "\n")

Другое решение:

Возможно, откройте другой файл в другом окне, используйте :%yh (h - имя регистра) и в исходном файле, в обычном режиме используйте "hp или "hP или в режиме вставки Ctrl-R Ctrl-O ч

1 голос
/ 26 августа 2017

Чтобы расширить принятый ответ с реальным кодом, так как я попробовал предложение, и оно работало хорошо;

Вот пример того, как он работает, чтобы вставить небольшой фрагмент 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`

может вставить текст после курсора. Или наоборот. Я сделал «перед курсором» более легким для запуска, потому что я использую его чаще при вставке в строку.


другое примечание

Это решение в основном полезно, если вы читаете из файла, который ожидаете использовать достаточно часто, и для этого стоит настроить сопоставление клавиш (т. Е. Читать фрагмент из файла). Это не очень помогает, если вы просто хотите читать случайные файлы всякий раз, когда у вас не будет готового сопоставления клавиш.

Так как это очень формульно, я уверен, что можно было бы определить функцию, которая бы принимала имя файла в качестве аргумента и делала бы то же самое. Я никогда не писал функции в vimscript, поэтому, если кому-то, кто знает больше, хочется отредактировать этот ответ, чтобы включить это решение - я призываю их сделать это!

0 голосов
/ 15 ноября 2014

То, что вы хотите использовать, это :.-1read <file> (.-1 - номер текущей строки минус 1).

Я использую следующую привязку клавиш для простой вставки различных шаблонов, которые у меня есть: nnoremap <Leader>in :.-1read ~/.vim/templates/.

Обратите внимание, что что-то вроде nnoremap <Leader>in <Up>:read ~/.vim/templates/ будет НЕ работать, когда стоит в строке 1. Это действительно странно и, вероятно, ошибка в Vim (я использую 7.4.x).

0 голосов
/ 09 февраля 2011
" put this in your ~/.vimrc
" in insert mode press ,n
"
imap ,n <c-r>=expand("%:p")<cr>

Подробнее в Викия .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...