Как избавиться от строки «по умолчанию» (последней использованной) в некоторых функциях emacs?


12

У меня следующая проблема: когда я использую 'Cx rt' (string-rectangle), мне предлагается ввести некоторую строку, чтобы заменить выбранный прямоугольник. Скажем, я набираю ";;" (закомментировать прямоугольник). Это работает просто отлично, но в следующий раз, когда я вызываю ту же функцию, и я хочу заменить ее ничем (пустая строка), я не могу этого сделать, потому что есть строка по умолчанию ";;" что я ранее использовал, и если я просто нажму Enter, команда будет использовать это ";;" строка вместо пустой. Как установить пустую строку?

Подобная проблема у меня была с некоторыми функциями поиска / замены. По сути, когда он запоминает последнюю использованную строку и устанавливает ее по умолчанию, как мне вместо этого «ввести» пустую строку?

РЕДАКТИРОВАТЬ :

Kill-rectangle, упомянутый YoungFrog, решает конкретную проблему, но я имел в виду еще одну вещь: в сущности, в любой функции emacs запоминает последнее введенное вами значение и использует его как «значение по умолчанию», когда вы просто нажимаете enter, вы должны возможность очистить это «значение по умолчанию» от того, что было реальным значением по умолчанию перед первым использованием функции. Вот еще один пример:

В режиме Dired, если вы «Mx rgrep», он запрашивает 3 входа:

1) Что искать: все, что вы введете здесь, будет использовано по умолчанию при следующем использовании rgrep. Как кто-то указал, нет смысла искать пустую строку, поэтому очистка этого значения «по умолчанию» действительно никогда не нужна, я думаю.

2) Далее он спросит, в каких файлах искать. По умолчанию это «все» файлы. Если я введу * .txt и осуществлю поиск, в следующий раз, когда я использую rgrep, * .txt будет использоваться как «по умолчанию». Теперь я хочу очистить этот «default» * .txt и вернуться к исходному значению по умолчанию «all», так же, как я хотел очистить «;;» "default" в функции string-rectangle соответствует реальному значению по умолчанию, пустой строке.

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

3) Затем он запросит базовый каталог, здесь нет проблем.

Итак, как я вижу, всякий раз, когда emacs пытается помочь мне, вспоминая мое последнее использованное значение в какой-то команде (что я нахожу очень полезным в большинстве случаев), должен быть способ очистить это использованное значение, как если бы я никогда не использовал это Команда раньше.

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


1
Я считаю, что это сложно, потому что чтение и обмен значения по умолчанию для пустой строки в большинстве случаев не происходит в одной и той же функции. В этом конкретном случае delete-rectangleэто вариант.
политза

Если вы намереваетесь вставить пробелы в выделенный прямоугольник, вы можете использовать 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
Я ответил только на конкретный приведенный пример, потому что IMO в общем случае (вопрос в заголовке) не допускает (общего) ответа. Тем не менее, я хочу отметить, что 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.