ZSH Обратитесь к последнему элементу текущего списка аргументов и расширить его

Настройте так, чтобы каталог / home находился в отдельном разделе. Таким образом, если вам нужно выполнить новую установку, вы можете переформатировать другие разделы и сохранить текущий / домашний каталог. Вы даже можете использовать каталог / home в качестве второго диска и поместить 2 или более версий Linux в отдельные корневые разделы! Я использую небольшой основной диск 80 ГБ (hda) для корневого диска (/, / boot, / usr, / var, / etc и т. Д.), А затем диск 1 ТБ (hdb) для / home. Я повторно использовал тот же диск / home для Debian, Ubuntu и LinuxMint, поскольку Ubuntu и Mint являются производными от Debian.

3
19.11.2018, 22:32
3 ответа

Звучит как забавная игра в гольф. Вот один из вариантов:

  1. Запустите безобидную команду с именем файла; введите достаточную часть имени файла, чтобы разрешить завершение TAB -.

    : a_file<TAB>
    
  2. Используйте !!$для ссылки на последний аргумент предыдущей команды:

    ln !!$ ~/path/to/a/new/hardlink/!!$
    

Благодаря полезному цитированию zsh это безопасно даже при наличии IFS -, содержащих имена файлов. Вы заметите, что как только вы нажмете пробел после первого !!$, zsh расширит имя файла; то же самое, если вы добавите пробел в конце команды.

Требуемое количество символов:

  • 3 х 2 = 6 для двоих!!$
  • 2 для:<SPACE>

8 + плюс достаточно для начального завершения табуляции.

1
27.01.2020, 21:15

С привязками Emacs по умолчанию это всего две комбинации клавиш:ESC-2 ESC-^_(т.е. Esc2EscCtrl +_или Alt + 2Ctrl + Alt +_). Это командаcopy-prev-wordс числовым аргументом 2 (, аргумент по умолчанию 1 будет копировать~/path/to/a/new/hardlink/). Если имя файла содержит пробелы (в кавычках ), вам понадобится ESC-2 ESC-x copy-prev-shell-word RET. Вы можете захотеть привязать эту команду к более удобной клавише, особенно если ваша раскладка клавиатуры требует Shift для_. Вы также можете использовать эти команды в режиме vi, но ни одна из них не привязана к клавише по умолчанию.

Если вы ошиблись с числовым аргументом, нажмите Ctrl +_для отмены и повторите попытку.

3
27.01.2020, 21:15

В режиме viэто будет <esc>0wyt $pпереход в командный режим, 0начало строки, wпереход к следующему слову (переход к имени файла)ytпереход к пробелу (чтобы получить длинное имя файла, предполагая, что в имени файла нет пробелов ), а затем $p, чтобы поместить то, что было выдернуто, в конец строки. Это намного быстрее, чем описывать его, когда вы запоминаете viдвижения.

Вы также можете настроить bindkeyдля извлечения -второго аргумента, хотя это довольно специфический код для такого варианта использования, здесь привязанный к control+t , но это может быть все, что вы хотите.

function yank-put {
  local -a words
  words=(${(z)LBUFFER})
  if (( $#words > 1 )); then
    BUFFER+=$words[2]
    CURSOR+=${#words[2]}
  fi
}
zle -N yank-put
autoload -U yank-put compinit
compinit
set -o vi
bindkey -M viins "^t" yank-put
1
27.01.2020, 21:15

Теги

Похожие вопросы