Подтвердить что ты не робот

Vim: вставить текст из файла в текущую позицию курсора

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

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

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

Ответ 1

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

Ответ 2

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

    :r <cfile>

Ответ 3

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

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

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

Ответ 4

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

Вот пример его работы для вставки небольшого фрагмента 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 обычно работает, чтобы вставить yanked текст. Альтернативно, чтобы вставить перед курсором, вы должны изменить 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, хотя, если кто-то, кто знает больше, чувствует, что редактирует этот ответ, чтобы содержать это решение, - я призываю их сделать это!

Ответ 5

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

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

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

Ответ 6

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

Подробнее в wikia.