Только закончив командную строку &
не полностью отсоединит процесс, он просто выполнит его в фоновом режиме. (С zsh
можно использовать &!
для фактического отсоединения это, иначе который Вы имеете, делает disown
это позже).
Когда процесс будет работать в фоновом режиме, он не будет получать вход от своего терминала управления больше. Но можно передать его обратно в передний план с fg
и затем это считает вход снова.
Иначе не возможно внешне изменить свой filedescriptors (включая stdin) или повторно прикрепить потерянный терминал управления …, если Вы не используете средства отладки (см. ответ Ansgar или взгляните на retty
команда).
Я уверен, что существуют другие способы сделать это..., но основная команда, которую Вы хотите, :r[ead]
который вставляет вывод команды в буфер.
Так, для вставки просто имени файла:
:r! echo %
И, для включения полного пути:
:r! echo %:p
Для большего количества информации:
:help read
:help filename-modifiers
Текущее имя файла находится в "%
регистр, таким образом, можно вставить его (в то время как в режиме вставки) с <c-r>%
; полный путь может быть вставлен с <c-r>=expand("%:p")
. Вы могли сделать макрос из него при использовании его часто. Для больше, подобные приемы, посмотрите :h expand
и :h "=
.
<c-r>
отображенный как команда восстановления?
– J.C. Yamokoski
04.12.2012, 17:38
<c-r>
указывает, что следующий символ является регистром.
– Kevin
04.12.2012, 17:43
Как видно в :h registers
, "%
регистр содержит текущее имя файла. :pu[t]
команда вставляет содержание регистра в текст.
Так, для вставки фактического имени файла, можно ввести любой из них в командном режиме:
:put %
или
"%p
Для вставки имени файла с полным путем ввести
:put=expand('%:p')
в командном режиме.
Подробнее:
:h pu[t]
Путем ввода "rp
можно вставить содержание регистра "r
.
:put "%:p"
кажется, не работает на меня. Это, кажется, работает только с, расширяются (), как в: :put =expand('%:p')
, который делает его не намного менее громоздким, чем <c-r>=expand('%:p')
к сожалению.
– akavel
16.09.2015, 14:21
Простой путь состоит в том, чтобы работать:
!!echo %
!!
заменяет текущую строку результатом команды после него.
%
заменяется под названием отредактированный файл в команде, таким образом, это эффективно вставит то имя в отредактированном файле.
Имя файла является тем, которое Вы передали vi (m) команду и могли бы содержать относительный или полный путь. Если Вы хотите разделить его и только сохранить имя файла, работать
!!basename %
Я искал самый простой способ вставить текущее имя файла (без пути или расширения )в текущую позицию (без новой строки, без замены текущей строки ). Итак, объединив предыдущие ответы и эту ссылку , это то, что я искал.
В вставьте режим:
<C-R>=expand("%:t:r")
Затем в следующий раз (с командой уже в истории):
<C-R>=<UP>