Що означає (arg: n) у командному рядку?


10

У курсі командного рядка Codecademy при спробі використовувати ярлик клавіатури Alt+Shift+#(який повинен коментувати поточний рядок) у командному рядку, він перемикає запит з $на, (arg: 3)а не додає тире на початку рядка. Alt+Shift+@зробить його відображенням (arg: 2)замість цього тощо. Дивіться останній рядок на скріншоті нижче. До того, як я вдарив, Alt+Shift+#це було просто $.

скріншот

Ярлик працює добре на моїй машині.

  1. Що це за (arg: n)річ?
  2. Від чого залежать комбінації клавіш для роботи? Розкладка клавіатури? Дистрибутив ОС? Термінальний емулятор? CLI за замовчуванням? Що?

Відповіді:


15

Це підказка бібліотеки читання рядків під час введення числового аргументу. Ввівши AltShift@на клавіатурі, ви, мабуть, вводите до Alt2яких карт M-2, які за замовчуванням виконуються digit-argumentу рядку читання , і починаєте вводити числовий аргумент. Якщо потім натиснути Alt3(до яких AltShift#карт у вашому випадку), ви побачите швидку зміну на (arg: 23); ви можете продовжити будь-яку Altкомбінацію -digit.

Ці аргументи використовуються, наприклад, для певних функцій зчитування рядків yank-nth-arg. Щоб побачити це в дії, запустіть

echo Hello my friend

потім натисніть, Alt2а потім CtrlAltY; ви побачите (arg: 2)підказку, а потім зникне, і другий аргумент попередньої команди ("мій") буде доданий до вашого поточного командного рядка.

Детальні відомості див. У зв'язаній документації вище. Bash використовує readline для обробки свого вводу; інші снаряди не будуть демонструвати таку саму поведінку.

Деякі емулятори терміналів використовують деякі з цих комбінацій клавіш для власних цілей; наприклад, у терміналі GNOME, Alt-digit переходить на n- ту вкладку. Вам потрібно буде відключити ці комбінації, щоб використовувати функції readline.

У вашому випадку емулятор терміналів на основі Codecademy, схоже, не справляється з AltShiftкомбінаціями. Якщо числові ярлики аргументів вам не потрібні, ви можете змінити їх за допомогою запуску

bind Meta-3:insert-comment

Теоретично ви маєте змогу постійно зберігати це, додаючи

Meta-3: insert-comment

до ~/.inputrcфайлу, але я не міг змусити його працювати над Codecademy.


1
Дякую. Як відключити читання чи іншим чином просто скористатися комбінацією клавіш, щоб коментувати поточний командний рядок?
користувач331380

Який термінальний емулятор ви використовуєте?
Стівен Кітт

Я хочу знати, як це зробити на Codecademy, у мене немає способу клацнути правою кнопкою миші та дізнатися це. ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)виходи /usr/local/bin/ein -service-port 4006 -http-port 4007. Чи допомагає це?
user331380

1
@ user331380 Ймовірно, ви там використовуєте bashshell на Codeacademy. В інтерактивній оболонці ви можете запустити новий екземпляр за допомогою bash --noediting. Це призведе до відключення читальної readlineлінії , але майте на увазі, що бібліотека відповідає за безліч функцій редагування рядків, що може зробити інтерактивне використання оболонки трохи більш незручним
Сергій Колодяжний

Можливо, варто згадати, що це також трапляється і в vi-клавіатурних зв'язках, коли ви просто вводите число в звичайному режимі, щоб представити числовий аргумент для наступної введеної вами звичайної команди команди.
JoL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.