Исправление .zshrc на ~/.zshrc

Исправление .zshrc на ~/.zshrc

Есть ли способ установить какой-то псевдоним, чтобы когда я делаю:

cd some/directory
vim .zshrc

Оно делает vim ~/.zshrc?

решение1

Ответ гораздо проще, чем вы думаете, потому что вы задаете неправильный вопрос.

Если вы действительно имеете в виду «как мне создать псевдоним, который позволит мне редактировать мой каталог ~/.zshrcнезависимо от моего текущего рабочего каталога?», то ответ будет простым:

alias zshconfig="vim ~/.zshrc" 

Это мой собственный пример ~/.zshrc, и я часто его использую.

Еще лучший вариант, предложенный@mateen-ulhaqв комментариях ниже, будет:

alias zshrc="vim ~/.zshrc" 

Другими словами, не пытайтесь создать псевдоним имени файла или пути к имени файла. Оба эти варианта возможны, но могут создать непредсказуемые побочные эффекты, которые впоследствии могут вызвать у вас проблемы, как@майкл-гомеруказал.

Но поскольку вы знаете, что ваш предпочтительный $EDITORфайл — vim, просто создайте псевдоним для vimвызова этого конкретного файла, и все будет в порядке. (Гораздо безопаснее создать псевдоним для определенной комбинации команд и аргументов в виде необычной строки, которая с меньшей вероятностью будет использоваться вне контекста.)

Однако в более общем плане мой совет заключается в том, что вам не следует беспокоиться об оптимизации двухсимвольной последовательности ~/, а вместо этого вам следует привыкнуть к ее набору. Продолжайте... вытяните левый мизинец, как будто вы Эдди Ван Хален, практикующий гаммы. (Это поможет вам освоить это, vimпока вы этим занимаетесь, поскольку вам, вероятно, следует привыкнуть нажимать на Escклавишу этим мизинцем!)

По мере того, как ваши навыки печати улучшатся, вы приобретете мышечную память на ~/последовательность, которая поможет вам надежно вводить эту последовательность символов при обращении к файлам в вашем домашнем каталоге. Вы будете вводить ее быстро намеренно, и вы не введете ее случайно.

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

решение2

Я не вижу смысла, но да. То, что вы делаете, сложнее, чем просто дать команде другое имя или какие-то аргументы по умолчанию, поэтому вам нужна функция, а не псевдоним.

function vim {
  if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
    set -- ~/.zshrc
  fi
  command vim "$@"
}

Объяснение: при запуске vim, он вызовет функцию. В последней строке command vim …вызывает внешнюю команду и "$@"передает ей аргументы, которые были переданы функции. Между ними, если есть ровно один аргумент и этот аргумент является точной строкой .zshrcи в текущем каталоге нет вызываемого файла .zshrc, командная строка заменяется на ~/.zshrc. Измените эти условия, если они не совсем то, что вам нужно.

решение3

Вероятно, вы используете zsh в качестве оболочки, что делаетиметь функцию «глобального псевдонима»который позволяет вам сделать это:

% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc

То есть,в любом местечто слово .zshrcпоявляется в командной строке, оно заменяется на ~/.zshrc, которое затем, как обычно, подлежит расширению тильды. Оно должно быть собственным "словом" оболочки, поэтому оно не будет расширено, если это всего лишь подстрока более длинного имени. Это работает с любой командой.

Глобальные псевдонимы печально известны своей проблематичностью, поскольку они действительно расширяются куда угодно, молча, и поэтому вы можете, например, запустить их rm .zshrcв другом каталоге, и они будут нацелены на ваши собственные dotfiles. Они также применяются внутри функций оболочки, даже тех, которые уже определены. В этом случае это кажется относительно маловероятным, чтобы вызвать проблему, но знайте о ее возможности. Вы можете конкретно назвать файл в текущем каталоге с помощью ./.zshrc, или получить буквальную строку с помощью \.zshrcили, заключив ее в кавычки.

Связанный контент