В чем полезность «обменять-и-пометить»?

16

Эта exchange-point-and-markкоманда обязательна C-x C-x, но я не могу придумать ни одного варианта использования, который сделал бы ее заслуживающей столь заметного связывания.

Как я могу использовать, exchange-point-and-markчтобы улучшить мою технику редактирования?

Мэтью Пизиак
источник

Ответы:

19

Есть два случая, о которых я могу подумать: реактивация региона и корректировка размера региона.

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

Например, сделайте Cs и ищите что-нибудь вперед. Нажмите RET, чтобы выйти из поиска, затем нажмите Cx Cx, чтобы отметить все, откуда вы начали поиск.

Еще один пример, который я часто делаю, когда хочу включить пример ответа elisp в ответ StackExchange:

  1. Отметьте бит кода, который я хочу скопировать.
  2. Нажмите Cu Cx TAB для отступа кода на 4 пробела. Таким образом, он будет представлен как код здесь на сайте. Этот шаг деактивирует регион.
  3. Нажмите Cx Cx, чтобы реактивировать регион, затем Mw, чтобы скопировать его в буфер обмена, чтобы я мог вставить его в свой ответ StackExchange.

Другой случай, когда вы отмечаете регион и хотите расширить / уменьшить его. В этом случае удобно иметь возможность перепрыгнуть на «другой конец» региона, переместить его, а затем отскочить назад. Если регион уже активен, то нажатие Cx Cx оставит его активным, что позволит вам двигаться любым концом.

glucas
источник
17

Спросите Emacs: C-h r i exchange-point-and-mark RETили лучше C-h r i C-x C-x RET. Это приведет вас к информации, показанной ниже.

Вот что говорится в руководстве по Emacs, настройка узла, в ответ на ваш вопрос:

C-x C-xполезно, когда вы удовлетворены положением точки, но хотите переместить другой конец области (где находится отметка) . Использование C-x C-xвторого раза, если необходимо, помещает метку в новую позицию с точкой назад в ее исходную позицию. Обычно, если метка неактивна, эта команда сначала повторно активирует метку там, где она была установлена ​​в последний раз, чтобы область оставалась выделенной. Однако, если вы вызываете его с аргументом префикса, он оставляет метку неактивной, а регион - невыделенным; Вы можете использовать это, чтобы перейти к метке способом, аналогичным C-u C-<SPC>.

И вот что он говорит об этом в узле Disabled Transient Mark :

Выключение [ transient-mark-mode] переключает Emacs в альтернативный режим работы:

  • Установка метки с помощью команд, таких как C-<SPC>или C-x C-x, не выделяет регион. Таким образом, вы не можете сказать, посмотрев, где находится знак; Вы должны помнить.

    Обычное решение этой проблемы - установить отметку, а затем использовать ее, прежде чем забыть, где она находится. Вы также можете проверить, где находится метка, используяC-x C-x обмен местами точки и метки - см. Настройка метки .

Когда режим Transient Mark отключен, вы можете временно активировать его, используя C-<SPC> C-<SPC>или C-u C-x C-x.

и:

C-u C-x C-x Поменяйте точку и отметьте, активируйте отметку и временно включите режим переходной отметки до следующей деактивации отметки. (Это C-x C-xкоманда exchange-point-and-markс префиксным аргументом.)

Нарисовалась
источник
8

Я использую это, когда я потерял выделение из-за какой-то операции, которая его удалила, и я хочу восстановить выделение. Одним из таких сценариев будет:

  1. Выберите прямоугольник.
  2. Убей это.
  3. Отменить убийственный прямоугольник.
  4. C-x C-x восстановить выделение в прямоугольник.

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

wvxvw
источник
8

Другие ответы сосредоточены на полезности, C-x C-xкогда transient-mark-modeактивно. Но C-x C-xпредшествует transient-mark-modeи полезен независимо от этого.

Основная роль C-x C-xзаключается в том, чтобы поменять точку и пометить. Это полезно, когда вы редактируете две точки в одном буфере и по какой-то причине не хотите разбивать текущее окно. Сделайте некоторое редактирование, установите отметку, переместитесь в другую точку в буфере, сделайте некоторое редактирование C-x C-x, сделайте некоторое редактирование в прежнем месте C-x C-x, сделайте еще какое-то редактирование, до тошноты. (Если вы не планируете возвращаться ко второму пункту, это C-u C-SPCможет быть более интуитивно понятно. Посмотрите на кольцо пометок в руководстве по Emacs.)

Когда transient-mark-modeотключен, C-x C-xимеет еще одну важную цель: он позволяет выяснить, где находится регион. C-x C-x, быстрый взгляд в точку, C-x C-xснова.

(И если вам интересно - да, некоторые из нас по-прежнему предпочитают использовать Emacs с transient-mark-modeотключенным.)

JCH
источник