Как ввести несколько имен файлов с меньшим количеством нажатий клавиш

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

  1. В MacOS, переключателе Alt и Cmd: Ключи настроек/Клавиатуры/Особенных. Опция становится Командой. Команда становится Опцией.

  2. В Linux сделайте Cmd (супер) второй клавишей Ctrl: Создать ~/.Xmodmap с:

remove mod4 = Super_R

remove mod4 = Super_L

add Control = Super_R

add Control = Super_L

Удостоверьтесь Вы источник .Xmodmap в .bashrc с:

$xmodmap .Xmodmap

Результат состоит в том, что специальные ключи находятся в порядке, Вы находите их на любой клавиатуре: CtrlWin/CmdAlt. Я признаю, что наличие не супер в Linux является слабым местом, но легко жить без.

Но реальное волшебство состоит в том, что все те команды, которые используют ctrl в Linux и которые используют cmd в MaxOS, теперь отображаются на том же физическом ключе:


ctrl/cmd-c
ctrl/cmd-x
ctrl/cmd-v
ctrl/cmd-z
ctrl/cmd-b
ctrl/cmd-i
ctrl/cmd-u
etc

теперь все выполняются с тем же физическим сочетанием клавиш.

Это устранило 80% от моих раздражений, в то время как это достаточно просто и не смешивает к очень с ключами по умолчанию, которые делают совместное использование моего ноутбука трудно (программирование пары).

Я создал небольшие этикетки для указания на измененное отображение: https://twitter.com/ejgroene/status/270933843765260289/photo/1

16
07.07.2014, 15:10
6 ответов

Вы можете использовать расширения скобки:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.{pdf,png}
23
27.01.2020, 19:48

Этот вызов mogrify создаст новый png файл вместо того, чтобы перезаписывать pdf - надеемся ;)

mogrify -trim density 400 -format png th*.pdf

for th*. pdf использует соответствующее количество символов для выбора нужного файла или лучшего заполнения табуляции до тех пор, пока у вас не будет полного имени.

Таким образом, вы можете сделать псевдоним для всей команды вплоть до параметра png.

.
5
27.01.2020, 19:48

Если Вы всегда используете одну и ту же команду с небольшими вариациями (например, имя файла), Вы можете записать функцию:

pdf2png() { convert -trim -density 400 "$1" "$1:r.png" }

(эта функция специфична для zsh), и для каждого файла Ваш_файл. pdf вы хотите преобразовать:

pdf2png your_file.pdf

Примечание 1: Вы можете написать такую же функцию для других оболочек, но это немного сложнее.

Примечание 2: С помощью zsh, кавычки полезны только в том случае, если установлена опция SH_WORD_SPLIT (которая не является опцией по умолчанию).

.
5
27.01.2020, 19:48

Рассмотрим возможность использования переменных для хранения имен файлов. Они тоже автозаполняются:

f="this_is_a_very_long_filename_of_my_pdf_file"
convert -trim -density 400 "$f.pdf" "$f.png"

Я использую кавычки, потому что иногда кусаются пробелы.

Значительным преимуществом этого является следующее:

  1. Вы можете выполнять дальнейшие операции со значением в $f, зная, что оно указывает на нужный файл
  2. Это самый короткий из прыжков, чтобы записать это в cat listOfFiles | во время чтения f; do ... ; done loop structure.
  3. Часто имена автоматически генерируемых файлов очень похожи, и автозавершение очень быстро раздражает, если вам нужно сделать abcdx2 и так далее. Таким образом, вам нужно набрать его только один раз, и вы даже можете забрать последний файл или самый большой файл с помощью скрипта типа f=\ls -t | head -1``, вместо того, чтобы сначала запустить поиск, искать имя файла и транскрибировать его, как какую-то дрессированную обезьяну.
4
27.01.2020, 19:48

Для этого специального примера нельзя использовать расширение скобки . Однако, немного более гибким является виджет zle copy-prev-shell-word, который делает то, что подсказывает его имя, и удобен, если Вы хотите получить аналогичный аргумент, как и предыдущий, который не может быть систематически выведен из него.

Привяжите виджет, например, к CTRL+W:

bindkey '^W' copy-prev-shell-word

Если Вам так же лень, как и мне, используйте эту последовательность клавиш

bindkey '^W^W' copy-prev-shell-word
bindkey -s '^W' ' ^W^W'

, чтобы получить следующее поведение:

  • CTRL+W вставляет предыдущее слово оболочки с ведущим пустым (таким образом, Вы сохраняете одно нажатие клавиши! )
  • CTRL+W CTRL+W вставляет предыдущее слово оболочки непосредственно
2
27.01.2020, 19:48

Вы также можете использовать Расширение истории для ссылки на слова в текущей командной строке:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf !#:$:r.png
  • Обозначение события ! # относится к введенная командная строка
  • Указатель слова $ указывает последнее слово (перед раскрытием)
  • Модификатор r удаляет расширение файла.Это также отмечает конец текста, который заменяется при расширении истории.
  • .png - новое расширение. Это не относится к самому расширению.

Когда эта строка запускается, ! #: $: R заменяется именем вашего pdf-файла без расширения, таким образом создается команда из вопроса:

convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png

Эта строка затем напрямую выполнен.

Если вы хотите проверить команду после раскрытия истории, перед выполнением, используйте

setopt histverify

Это перезагрузит развернутую строку в буфер редактирования вместо ее выполнения.

Примечание: В отличие от любого другого раскрытия, раскрытие истории выполняется перед сохранением команды в истории. Таким образом, echo! # будет отображаться как echo echo , а не как echo! # в вашем $ HISTFILE .

2
27.01.2020, 19:48

Теги

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