Открыть мульти-файлы с помощью vim - PullRequest
0 голосов
/ 18 сентября 2018

Я знаю, как открыть несколько измененных файлов в vim с помощью git.

vim -O $(git status -uno -s | awk '{print $2}')

Но когда я добавляю эту команду в файл .bashrc

export vim_open="vim -O $(git status -uno -s | awk '{print $2}')"

Это не работает, как я ожидаю. Я пытаюсь повторить его, но он печатает только vim -O.

РЕДАКТИРОВАТЬ: мой плохой: git status -uno -s

Как сделать псевдоним для команды?

Ответы [ 2 ]

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

Могу ли я предложить аналогичный псевдоним, который открывает на вкладке все измененные файлы

alias vmod='vim -p `git diff --name-only `'
0 голосов
/ 18 сентября 2018

он печатает только vim -O.

Вся правая часть находится внутри двойных кавычек;это означает, что подстановка команды ($(...)) вычисляется немедленно, пока вы определяете переменную.Если (в этот момент) вы не находитесь в рабочей копии Git, вы получите ошибку;если измененных файлов просто нет, результат будет пустым, и он будет сохранен в вашей переменной.

Правильный псевдоним

Команда export предназначена для переменных среды ;в Bash есть отдельная команда alias:

alias vim_open='vim -O $(git stat -uno -s | awk '\''{print $2}'\'')'

Обратите внимание, как я использовал одинарные кавычки, чтобы избежать немедленного выполнения встроенной подстановки команд (а затем пришлось избегать других встроенных одинарных кавычек).В качестве альтернативы я мог бы сохранить двойные кавычки и избежать только символов $ для подстановки команд и ссылки на переменные:

alias vim_open="vim -O \$(git stat -uno -s | awk '{print \$2}')"

Суперсилы с функцией

Наконец, чтобы сохранить способностьпередать аргументы командной строки в Vim (они должны прийти перед списком файлов, но псевдонимы могут добавлять их только в конце), вместо этого вам нужно будет определить функцию оболочки:

vim_open()
{
    #     v--- arguments passed to vim_open are inserted here
    vim "$@" -O $(git stat -uno -s | awk '{print $2}')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...