Як я можу позбутися рядка "за замовчуванням" (останній використовується) в деяких функціях emacs?


12

У мене є така проблема: коли я використовую 'Cx rt' (рядок-прямокутник), мені пропонується ввести якусь рядок, щоб замінити вибраний прямокутник. Скажемо, я набираю ";;" (прокоментувати прямокутник). Це працює добре, але наступного разу, коли я викликаю ту саму функцію, і я хочу замінити нічим (порожня рядок), я не можу цього робити, тому що є "рядок" за замовчуванням ";;" що я раніше використовував, і якщо я просто натискаю, введіть команду, буде використовувати це ";;" рядок замість порожнього. Як встановити порожній рядок?

Подібна проблема у мене була з деякими функціями пошуку / заміни. Якщо я пам'ятаю останній рядок, який я використав, і встановив його за замовчуванням, як я замість цього "вводя" порожню рядок?

Редагувати:

Прямокутник Kill, згаданий YoungFrog, вирішує конкретну проблему, але я мав на увазі іншу річ: в основному, що коли-небудь функція emacs запам'ятовує останнє введене вами значення, і використовує його як "за замовчуванням", коли ви просто натискаєте enter, ви повинні бути змогли зрозуміти, що "за замовчуванням" до того, що було справжнім за замовчуванням до першого використання функції. Ось ще один приклад:

У режимі перенаправлення, якщо ви 'Mx rgrep', він вимагає 3 входи:

1) Що шукати: те, що ви введете сюди, буде використане за замовчуванням наступного разу, коли ви будете використовувати rgrep. Як хтось зазначав, немає сенсу шукати порожній рядок, тому очищення цього значення за замовчуванням насправді ніколи не потрібне, я думаю.

2) Далі він запитає, в яких файлах шукати. Справжній за замовчуванням - це "всі" файли. Якщо я ввійду * .txt і шукаю, наступного разу, коли я буду використовувати rgrep, * .txt буде використаний як "за замовчуванням". Тепер я хочу очистити цей "за замовчуванням" * .txt і повернутися до початкового за замовчуванням "all", як я хотів очистити ";;" "за замовчуванням" у функції рядка-прямокутника, це справжній за замовчуванням порожній рядок.

Звичайно, цю конкретну проблему для всіх файлів, ймовірно, можна було б вирішити набравши *? Але ця загальна проблема проблеми залишається в інших командах, які пам'ятають останнє використане значення.

3) Далі буде просити каталог Base, тут немає жодних проблем.

Отже, я бачу це, коли Emacs намагається допомогти мені, запам'ятовуючи моє останнє використане значення в якійсь команді (що я вважаю дуже корисною більшість часу), повинен бути спосіб очистити використане значення, як ніби я ніколи цього не використовував командувати раніше.

PS Я все ще новачок у emacs, і, можливо, функціонал, який я вимагаю, не потрібен, оскільки завжди є певне вирішення?


1
Я вірю, що це складно, тому що читання та обмін значенням за замовчуванням для порожнього рядка не відбувається в одній і тій же функції в більшості випадків. У цьому конкретному випадку delete-rectangleє варіант.
politza

Якщо ви маєте намір вставити пробіли у вибраний прямокутник, ви можете використовувати clear rectangle.
Каушал Моді

Якщо ви просто хочете заблокувати коментар / коментар, чому б не використовувати comment-dwim? Також вводити "порожній" рядок для пошуку не має сенсу, але ви можете ввести порожню рядок для заміни. Мені цікаво побачити більше прикладів, коли користувачеві може знадобитися введення порожнього рядка.
Каушал Моді

3
Просто переглянув ваш опис швидко, але здається, що може виникнути проблема з дизайном команди string-rectangle. Щоразу, коли порожній рядок має сенс як можливий ввід, повинен бути спосіб ввести його, на відміну від прийняття значення за замовчуванням. Подивіться уважно на документ для команди (і на його вихідний код, якщо вам це зручно), щоб побачити, чи є насправді недолік дизайну. Якщо ви думаєте , є, то , будь ласка , повідомте про це: M-x report-emacs-bug.
Дрю

Бо 2)ви можете буквально ввести all, що трохи відрізняється від *: воно .*теж відповідає.
npostavs

Відповіді:


3

Не використовуйте C-x r t( string-rectangle), а використовуйте C-x r k( kill-rectangle).


1
Я відповів лише на конкретний приклад, оскільки ІМО в загальній справі (питання в заголовку) не відповідає (загальної) відповіді. Проте хочу зазначити, що C-j(замість RET) може допомогти в деяких випадках, наприклад, ido-mode.
YoungFrog

3

У загальному випадку того, чого ви хочете, неможливо досягти. Це відбувається тому, що кілька утиліт та режимів у Emacs зберігають історію завершення читання в різних змінних, а не в одному місці. Ви можете вручну встановити ці змінні історії в nil( C-x r tнаприклад, (setq string-rectangle-history nil)), але це не масштабує. Також непросто виявити назви змінних історії, не читаючи код.

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