Вы можете использовать expand ()
вызов. Например,
:echo expand("#2:p")
напечатает полный путь к файлу в буфере №2. Вы можете перечислить все буферы с помощью : ls
Вы можете использовать другие модификаторы и другие ключевые слова (для получения полной информации см. : help expand ()
)
Вот небольшой отрывок:
Когда {expr} начинается с '%', '#' или '<', раскрытие выполняется как для специальные переменные cmdline с соответствующими модификаторами . Вот краткий обзор: % текущее имя файла # альтернативное имя файла #n альтернативное имя файла n
имя файла под курсором имя файла autocmd номер буфера autocmd (в виде строки!) сопоставленное имя autocmd имя исходного файла сценария номер строки исходного файла сценария слово под курсором WORD под курсором <клиент> {clientid} последнего полученного сообщения server2client () Модификаторы: : p развернуть до полного пути : h head (последний компонент пути удален) {{ 1}}: t tail (только последний компонент пути) : r root (удалено одно расширение) : только e extension Пример: {{1} }: let & tags = expand ("%: p: h"). "/ tags" Обратите внимание, что при раскрытии строки, начинающейся с '%', '#' или '<', любой следующий текст игнорируется. Это НЕ работает: : let doesntwork = expand ("%: h.bak") Используйте это:
Чтение через man 5 systemd.unit
и man 5 systemd.target
сообщает нам, что файлы модулей используются для определения целей, а также всего остального systemd. Нет специальной документации о том, как создать цель , поэтому сложно определить, как это должно быть сделано, но это не слишком отличается от создания службы.
При создании цели вам нужно будет создать символические ссылки в каталог target.wants
из каталога служб systemd. Затем вы можете установить / загрузить свою цель. Вот как это может выглядеть на вашем примере.
Это файл целевого модуля. Если взять в качестве примера graphical.target, мы можем создать нашу собственную цель, используя ее в качестве основы.
[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes
Объяснение параметров, взятых из справочных страниц systemd;
Описание
- Описывает цель. Вы должны понимать Требует
- жесткие зависимости цели. Прежде чем запускать собственные службы Хочет
- Программные зависимости, вы должны запустить базовую систему. Цель не требует их для запуска. Конфликты
- Если у юнита есть настройка Конфликтов на другом юните, запуск первого остановит второй и наоборот. После
- Загрузка после этих служб AllowIsolate
- Это действительно зависит от вас и вашей среды. Подробности доступны на странице руководства systemd.unit (5)
Это каталог, в котором вы будете связывать службы, которые вы создаете / требуете для своего цель. Это эквивалентно параметру Wants =
в файле модуля. Создайте этот каталог, а затем создайте такие символические ссылки; ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service
. Это создает символическую ссылку от bar.service в системном каталоге к вашему каталогу foo.target.wants.
Я думаю, что создание файла модуля для службы выходит за рамки этого ответа, и этот вопрос определенно более документирован, поэтому я оставлю это на данный момент. Когда вы создаете свой файл модуля, просто создайте символическую ссылку на каталог target.wants или добавьте его в директиву Wants =
.
Я настоятельно рекомендую взглянуть на них самостоятельно в качестве примеров, прежде чем приступить к выполнению этой задачи,
vim /lib/systemd/system/*.target
Обратите внимание, что если вы создаете свою собственную цель, вам не нужно ничего связывать вручную.
Вы можете просто добавить службу в /etc/systemd/system
и запустить на ней systemctl enable
. Пока это WantedBy
или RequiredBy
, systemd сделает всю работу за вас.