Эффективно используя кольцо с надписью

29

Я использовал метку для выбора областей буфера. Например, я знаю, что последовательность C-<space> C-s fooможет использоваться для выделения всего текста между текущей точкой и точкой после поиска foo.

Недавно я обнаружил существование кольца меток, поэтому я могу C-<space> C-<space>оставить метку, переместить точку в буфере и затем C-u C-<space>вернуться назад.

Есть ли какие-либо предложения, руководства или советы для эффективной навигации с помощью кольца меток?

Патрик Стил
источник
2
Спасибо, что задали вопрос. Одна мысль, которая приходит мне в голову, это сделать более быструю привязку для «добавления отметки», например (global-set-key (kbd "s-m") '(lambda () (interactive) (push-mark))).
Джо Корнели

Ответы:

22

Шлем имеет интерфейс для просмотра локальных и глобальных метки кольца: helm-all-mark-rings.

Смотрите мини-руководство для краткого описания и скриншота.

И если вы предпочитаете Ivy / Swiper / Counsel , смотрите counsel-mark-ring.

Давор Кубраник
источник
Потрясающе. Одна вещь, которая могла бы улучшить это, это действие по удалению метки с кольца меток ...
Джо Корнели
12

При установке set-mark-command-repeat-popна с tпомощью

(setq set-mark-command-repeat-pop t)

Вы можете продолжать нажимать C-SPCпосле первого вызова, C-u C-SPCчтобы перейти к предыдущим местам, сохраненным в кольце меток.

itsjeyd
источник
10

Я считаю, что проще использовать регистры для обозначения местоположений, C-x r <space>а затем букву для отметки C-x r jи букву для возврата назад. Я могу поддерживать несколько отметок, очень полезно при чередовании нескольких буферов

Alain
источник
2
Я всегда останавливаюсь, чтобы выбрать лучшее письмо, чтобы назначить мой регистр ...
nispio
@nispio Некоторое время назад я реализовал расширение git@github.com: atykhonov / iregister.el.git Одна из идей заключалась в том, чтобы пропустить решение о том, какой регистр использовать. Может быть, расширение не будет полезным для вас, но вы можете заимствовать идею, в которой ваш пользовательский скрипт может просто использовать любой свободный регистр, и тогда он позволит просматривать используемые регистры и восстанавливать.
Андрей Тихонов
9

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

dgtized
источник
C-x C-xРежим Transient-Mark-Mode отлично подходит для выбора последней вещи, которую вы либо выбрали (полезно в режиме iedit), либо дернули.
Руна Каагард
8

Помимо других советов, которые вы получили здесь, я подумал, что должен упомянуть, что C-sставит вам оценку, поэтому нет необходимости делать это явно. Кроме того, многие команды, которые «перемещаются на потенциально длинный путь» ( beginning-of-bufferи, end-of-bufferнапример), также устанавливают метку, с которой вы начали. Вместе с другими способами работы с меткой (всплывающее окно, точка обмена, метка и т. Д.) Это довольно мощный способ работы с буфером, если вы понимаете, как он работает. Также обратите внимание, что если вы вытягиваете текст в буфер, наведите и отметьте окружающий текст.

Матиас Даль
источник
5

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

Что я использую: мультикоманда Icicles (привязана к ) для обхода меток в любом буфере ( ) и ( ) для обхода глобальных меток ( ). icicle-goto-markerC-- C-SPCmark-ringicicle-goto-global-markerC-- C-x C-SPCglobal-mark-ring

Строки текста, где расположены маркеры, используются в качестве кандидатов на завершение. Вы можете напечатать некоторый текст (например, substring, regexp), чтобы сузить кандидатов до совпадающих строк. Вы можете переключаться между соответствующими линиями, посещая любые, которые вам нравятся. Если вы также используете библиотеку, crosshairs.elто положение маркера, который вы посещаете, временно выделяется перекрестием, чтобы вы могли быстро увидеть, где он находится.

Вот часть строки документа для icicle-goto-marker:

Go to a marker in this buffer, choosing it by the line that includes it.
If `crosshairs.el' is loaded, then the target position is highlighted.

By default, candidates are sorted in marker order, that is, with
respect to their buffer positions.  Use `C-M-,' or `C-,' to change the
sort order.

During completion you can use these keys:

`C-RET'   - Goto marker named by current completion candidate
`C-down'  - Goto marker named by next completion candidate
`C-up'    - Goto marker named by previous completion candidate
`C-next'  - Goto marker named by next apropos-completion candidate
`C-prior' - Goto marker named by previous apropos-completion candidate
`C-end'   - Goto marker named by next prefix-completion candidate
`C-home'  - Goto marker named by previous prefix-completion candidate
`<S-delete>' - Delete marker named by current completion candidate

Use `mouse-2', `RET', or `S-RET' to choose a candidate as the final
destination, or `C-g' to quit.
Нарисовался
источник