vim: терминал, чтобы выполнить команду, но остаться в оболочке против выхода - PullRequest
0 голосов
/ 27 августа 2018

я знаю, что в VIM я могу набрать

:terminal <command> %

для запуска команды для файла в текущем буфере редактирования. например и чтобы упростить то, что я хочу сделать, давайте возьмем простую команду ls:

:terminal ls %

, который разделит окно, запустит команду и выйдет из оболочки, оставив вывод на экране. это не что я хочу. я хочу, чтобы он запускал команду, но оставил меня в оболочке , чтобы я мог запустить больше команд bash, потенциально связанных с текущим файлом / операцией, а затем завершить работу вручную, когда я закончу.

если я просто наберу

:terminal

это приводит меня к оболочке bash, которая позволяет мне набирать столько команд, сколько я хочу, и это здорово. НО я тогда теряю возможность использовать средство расширения%, и легкость порождения терминала из файла, который я редактирую. то есть. я теряю автоматизацию контекста, предоставляемого порождением из исходного файла / буфера, что означает, что мне нужно вручную ввести текущее имя файла, включая потенциально длинный путь , или прокрутить предыдущую историю bash, чтобы повторно запустить исходную команду. это трата нажатий клавиш.

В основном я пытаюсь найти способ создать карту vim, которая позволяет мне использовать% имени расширения файла в команде bash с помощью :term без ВТО, завершающего работу после выполнения команды (я предпочитаю оставаться в подскажите в оболочке продолжить сеанс!)

на самом деле мне все равно, если решение просто запускает оболочку :term и выводит мою команду с расширением% имени файла в приглашении bash, не вводя его ... что позволило бы мне оставаться в bash после выполнения команды мной с ручным возвратом каретки.

Я не уверен, возможно ли то, что я хочу сделать? обратите внимание, я не собираюсь приостанавливать мой текущий сеанс редактирования и возвращаться назад, так как он связывает текущий сеанс редактирования. я не уверен, что интеграция с tmux - vim может обеспечить способ сделать то, что я хочу, хотя я бы предпочел найти решение, использующее :term, так как это встроенная функция и хорошо работает, за исключением того, что я пытаюсь добиться :) 1027 *

Надеюсь, это имеет смысл. ТНХ

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Это отображение работает для расширения '%' и оставления нового терминала активным:

:nmap <F12> :let $MYFILE=expand('%')<CR>:terminal<CR>echo $MYFILE<CR>

Возможно, вам потребуется сопоставить другой ключ, но в противном случае это должно сработать.

0 голосов
/ 14 сентября 2018

Как прокомментировали люди, на самом деле не существует способа сделать это напрямую, но вы можете использовать вспомогательный скрипт, чтобы получить большую часть того, что вы хотите.

Используя bash в качестве оболочки (почему бы и нет), создайте такой скрипт:

#!/bin/bash

# could add echo $1 or ls $1 or whatever you want here.

V="$1" exec bash

Назовите его, скажем, vim-bash, сделайте его исполняемым и поместите его где-нибудь на своем пути. Тогда из vim :terminal vim-bash % даст вам оболочку с текущим именем файла, доступным как $V.

Вы расширяете эту идею, создавая команду vim, чтобы обернуть ее:

command! Vterminal :execute 'terminal vim-bash %'

и все, что вам нужно для запуска из vim - это :Vterminal. Вы получите оболочку, где вы можете легко получить доступ к имени файла:

$ echo $V
my/really/long/pathname

Вы можете видеть, что можете добавить свою команду ls непосредственно в сценарий, но если вы хотите быть предприимчивым, вы можете вместо этого адаптировать команду vim для прохождения через одну строку для выполнения в этой точке.

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