
В результате моего предыдущего вопроса я решил
alias groe= ?vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!'?
Я не могу найти, как заменить '?s' в моем примере, чтобы это сработало. Уже пробовал вопросительные знаки и апострофы. Буду признателен за любые идеи. Спасибо
решение1
Сделайте это функцией оболочки, чтобы можно было убрать внешние кавычки.
groe() {
vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
}
Это должно вызваться vim
с аргументами -c
, normal "+p1Gdddd"
, -c
, :%s/\n/
, -c
, normal"gVGgJy"
, -cq!
. Функция "$@"
at расширяется до параметров, которые вы передали функции, поэтому groe foo.txt
должна работать.
решение2
«Внутри» одинарных кавычек вы можете иметь одинарную кавычку, закрыв внешнюю одинарную кавычку, затем добавить экранированную одинарную кавычку и снова открыть внешние одинарные кавычки, например:
echo 'It'\''s ugly.'
Другими словами, все '
станет '\''
плюс внешние одинарные кавычки.
Ваш псевдоним будет выглядеть так:
alias groe='vim -c '\''normal "+p1Gdddd"'\'' -c '\'':%s/\n/'\'' -c '\''normal"gVGgJy"'\'' -c'\''q!'\'''
Или вы можете использовать экранирование в стиле C $'...'
, где вам нужно экранировать одинарные кавычки только один раз, а также экранировать символ в \n
:
echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''
решение3
На MacOS я обнаружил, что добавление следующей строки в мой файл .bash_profile
дает мне псевдоним, который настраивает мой полезный псевдоним только при последующем использовании команды logr
:
alias logr="alias r='java -jar LogUtil.jar -gui'"
Я использовал двойные кавычки ""
вокруг всего logr
псевдонима, который создается для всех новых оболочек, но тогда псевдоним r
становится доступным только после того, как я введу logr
команду.