После экспериментирования много и прохождения через всех видов сложных конфигураций, в которых очень трудно разобраться и поддержать, я нашел следующее простое решение.
В MacOS, переключателе Alt и Cmd: Ключи настроек/Клавиатуры/Особенных. Опция становится Командой. Команда становится Опцией.
В 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
Вы можете использовать расширения скобки:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.{pdf,png}
Этот вызов mogrify создаст новый png файл вместо того, чтобы перезаписывать pdf - надеемся ;)
mogrify -trim density 400 -format png th*.pdf
for th*. pdf использует соответствующее количество символов для выбора нужного файла или лучшего заполнения табуляции до тех пор, пока у вас не будет полного имени.
Таким образом, вы можете сделать псевдоним для всей команды вплоть до параметра png.
.Если Вы всегда используете одну и ту же команду с небольшими вариациями (например, имя файла), Вы можете записать функцию:
pdf2png() { convert -trim -density 400 "$1" "$1:r.png" }
(эта функция специфична для zsh
), и для каждого файла Ваш_файл. pdf вы хотите преобразовать:
pdf2png your_file.pdf
Примечание 1: Вы можете написать такую же функцию для других оболочек, но это немного сложнее.
Примечание 2: С помощью zsh
, кавычки полезны только в том случае, если установлена опция SH_WORD_SPLIT
(которая не является опцией по умолчанию).
Рассмотрим возможность использования переменных для хранения имен файлов. Они тоже автозаполняются:
f="this_is_a_very_long_filename_of_my_pdf_file"
convert -trim -density 400 "$f.pdf" "$f.png"
Я использую кавычки, потому что иногда кусаются пробелы.
Значительным преимуществом этого является следующее:
cat listOfFiles | во время чтения f; do ... ; done
loop structure. abcdx2
и так далее. Таким образом, вам нужно набрать его только один раз, и вы даже можете забрать последний файл или самый большой файл с помощью скрипта типа f=\
ls -t | head -1``, вместо того, чтобы сначала запустить поиск, искать имя файла и транскрибировать его, как какую-то дрессированную обезьяну. Для этого специального примера нельзя использовать расширение скобки . Однако, немного более гибким является виджет 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
вставляет предыдущее слово оболочки непосредственноВы также можете использовать Расширение истории для ссылки на слова в текущей командной строке:
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
.