Как я вставляю текущее имя файла в содержание в Vim?

Только закончив командную строку & не полностью отсоединит процесс, он просто выполнит его в фоновом режиме. (С zsh можно использовать &! для фактического отсоединения это, иначе который Вы имеете, делает disown это позже).

Когда процесс будет работать в фоновом режиме, он не будет получать вход от своего терминала управления больше. Но можно передать его обратно в передний план с fg и затем это считает вход снова.

Иначе не возможно внешне изменить свой filedescriptors (включая stdin) или повторно прикрепить потерянный терминал управления …, если Вы не используете средства отладки (см. ответ Ansgar или взгляните на retty команда).

39
30.09.2015, 02:16
5 ответов

Я уверен, что существуют другие способы сделать это..., но основная команда, которую Вы хотите, :r[ead] который вставляет вывод команды в буфер.

Так, для вставки просто имени файла:

:r! echo %

И, для включения полного пути:

:r! echo %:p

Для большего количества информации:

:help read
:help filename-modifiers 
28
27.01.2020, 19:35

Текущее имя файла находится в "% регистр, таким образом, можно вставить его (в то время как в режиме вставки) с <c-r>%; полный путь может быть вставлен с <c-r>=expand("%:p"). Вы могли сделать макрос из него при использовании его часто. Для больше, подобные приемы, посмотрите :h expand и :h "=.

38
27.01.2020, 19:35
  • 1
    Возможно, я неправильно читаю это, но не <c-r> отображенный как команда восстановления? –  J.C. Yamokoski 04.12.2012, 17:38
  • 2
    В режиме вставки, <c-r> указывает, что следующий символ является регистром. –  Kevin 04.12.2012, 17:43
  • 3
    Righto, спасибо. Полностью забыл переключать на режим вставки... А-ч –  J.C. Yamokoski 04.12.2012, 17:49
  • 4
    Можно также сделать "%p в нормальных или визуальных режимах. –  naught101 25.08.2017, 05:36

Как видно в :h registers, "% регистр содержит текущее имя файла. :pu[t] команда вставляет содержание регистра в текст.

Так, для вставки фактического имени файла, можно ввести любой из них в командном режиме:

:put %

или

"%p

Для вставки имени файла с полным путем ввести

:put=expand('%:p')

в командном режиме.


Подробнее:

:h pu[t]

Путем ввода "rp можно вставить содержание регистра "r.

15
27.01.2020, 19:35
  • 1
    :put "%:p" кажется, не работает на меня. Это, кажется, работает только с, расширяются (), как в: :put =expand('%:p'), который делает его не намного менее громоздким, чем <c-r>=expand('%:p') к сожалению. –  akavel 16.09.2015, 14:21
  • 2
    @akavel Вы корректны, я обновлю ответ.Спасибо!;) И, действительно, оба являются одинаково подробными. –  braunmagrin 30.09.2015, 02:00

Простой путь состоит в том, чтобы работать:

!!echo %
  • !! заменяет текущую строку результатом команды после него.

  • % заменяется под названием отредактированный файл в команде, таким образом, это эффективно вставит то имя в отредактированном файле.

Имя файла является тем, которое Вы передали vi (m) команду и могли бы содержать относительный или полный путь. Если Вы хотите разделить его и только сохранить имя файла, работать

!!basename %
5
27.01.2020, 19:35

Я искал самый простой способ вставить текущее имя файла (без пути или расширения )в текущую позицию (без новой строки, без замены текущей строки ). Итак, объединив предыдущие ответы и эту ссылку , это то, что я искал.

В вставьте режим:

<C-R>=expand("%:t:r")

Затем в следующий раз (с командой уже в истории):

<C-R>=<UP>
1
27.01.2020, 19:35

Теги

Похожие вопросы