Иногда я часто чередую две функции, которые я редактирую вместе друг с другом. В этих ситуациях утомительно и больно продолжать делать, C-s <functionname>
чтобы переключиться на другую функцию, а затем найти точное место, которое я редактировал ранее.
Как установить маркеры, а затем с легкостью перемещаться между двумя точками в буфере?
navigation
cycling
mark-ring
registers
Ведаад Шакиб
источник
источник
Ответы:
Emacs Windows
C-x 2
откроет другое окно (= разделить кадр) ниже текущего, прикрепленного к тому же буферу. Вы можете перемещать точку в любом окне, не влияя на другое.Вы можете перемещаться из одного окна в другое, используя
C-x o
. Встроенная библиотека windmove предоставляет некоторую функцию, которая облегчает навигацию между окнами.Если этот метод подходит вам, вы также можете посмотреть на косвенные буферы .
источник
Регистры:
C-xrSPCбежит
point-to-register
C-xrjбежит
jump-to-register
Введите любой символ, чтобы указать регистр при появлении запроса. 1
закладки:
C-xrmбежит
bookmark-set
C-xrbбежит
bookmark-jump
Отметить кольцо:
C-SPCC-SPCпереводит текущую позицию в кольцо меток (не оставляя его активным).
C-uC-SPCвыскакивает кольцо с меткой, перепрыгивая на предыдущую позицию. Вы можете использовать это несколько раз для навигации по всему кольцу.
Обратите внимание, что некоторые команды (особенно те, которые могут переместить вас на неизвестное или произвольное расстояние от вашего исходного местоположения) автоматически нажимают на кольцо меток, чтобы вы могли использовать его C-uC-SPCдля последующего возврата. Это включает в себя
isearch
, так что после использования, C-sчтобы пойти куда-нибудь, вы можете легко вернуться обратно.Обменный пункт и отметка:
И, как комментирует Tu Do, C-xC-xпробеги
exchange-point-and-mark
очень полезны для прыжков между двумя локациями. Он также активирует метку / регион, но вы можете использовать C-SPCдля очистки выделения.1 Если вы используете преимущества функции регистрации в elisp, используйте неконфликтующий символ для имени, а не символ, чтобы вы не могли конфликтовать с интерактивно установленными регистрами (если, конечно, вы не хотите делать что).
источник
C-x C-x
, так как он может прыгать вперед и назад между двумя позициями.C-u C-SPC
щелкнет кольцо метки и выполнит снова, переместит точку в другое место.В дополнение к ответу Филса, есть еще несколько вариантов:
helm-semantic-or-imenu : список всех доступных определений в текущем файле. Если курсор находится внутри определения, при активации маркера предварительно выбирается это определение.
sr-speedbar : файловый браузер, в котором перечислены его определения в каждом файле. Это похоже на контур дерева в IDE.
источник
Помимо регистров и маркеров (см. Ответ @ phils об обоих и о моем другом, Сосульки ответ о маркерах), для этого могут быть полезны закладки , в том числе как автономные, так и временные. Вам нужна библиотека Bookmark + для этих специальных типов закладок.
Autonamed закладка является один , что вам не нужно имя. Это быстро создавать и удалять: просто нажмите клавишу. Этот же ключ создает или удаляет закладку в точке. (По умолчанию это связано
C-x p RET
, но вы, конечно, можете использовать любую клавишу.)Автономные закладки, как и закладки в целом, являются постоянными. Но вы также можете удалить их автоматически.
Вы также можете создавать временные закладки или делать любые существующие закладки временными. Например, вы можете сделать так, чтобы автоматически именованные закладки автоматически становились временными.
Вы можете быстро переключаться между заданным набором закладок. Например, для циклического переключения между автоматически названными закладками используйте команды
bmkp-next-autonamed-bookmark-repeat
иbmkp-previous-autonamed-bookmark-repeat
(привязывая их к клавишам).Вы можете выделять места с закладками по-разному, чтобы их было легко найти .
источник
Что касается косвенных буферов, упомянутых в принятом ответе ...
M-x clone-indirect-buffer
создаст косвенный буфер для текущего буфера. К имени нового буфера будет добавлено «<2>» (или большее число, если у вас уже есть повторяющиеся имена буферов). Новый буфер открывается в новом окне. Вы можете переключиться обратно в одно окно, используяC-x 0
илиC-x 1
.С ним
M-x winner-mode
вы можете легко переключаться между двумя локациями.C-c <left>
/M-x winner-undo
иC-c <right>
/M-x winner-redo
переключает конфигурацию окна. В этом случае конфигурации будут позициями в двух буферах, просматривающих один файл.Примечание:
winner-undo
иwinner-redo
функции работают в списке конфигураций. Если конфигурация изменяется, например, перемещается точка, то текущая конфигурация становится главой списка иwinner-redo
является недействительной, в этом случаеwinner-undo
вернется прежняя позиция.Для ситуации ОП это приводит к следующему процессу;
M-x winner-mode
M-x clone-indirect-buffer
(новое имя косвенного буфера: File1.txt <2>)C-x 1
C-x b
(по умолчанию будет исходный буфер, если переход с другого буфера не произошел после шага 3). Это создает новую конфигурацию для победителя, чтобы переключиться обратно.Переключение на предыдущее место редактирования (конфигурация окна) зависит от того, было ли выполнено изменение конфигурации окна между переключателями;
C-c <left>
/M-x winner-undo
.C-c <left>
/M-x winner-undo
на назад иC-c <right>
/M-x winner-redo
на вперед.Изменение является ничем иным , чем другой
winner-undo
илиwinner-redo
.источник
если вы используете
evil-mode
слой vim, тоC-o
иC-i
будет работать так же.Они работают команды
evil-jump-backward
/forward
.C-o
переходит на более раннюю позицию в списке переходов, который устанавливается автоматически (метки устанавливаются в командах движения).C-i
идет в обратном направлении. Мы также можем использоватьTAB
послеC-o
вместоC-i
. Таким образом, использование обеих функций приведет вас назад и вперед в вашем текущем буфере.Если вы хотите, чтобы эта функция была кросс-буферами, проверьте
evil-jumpers
: http://melpa.org/#/evil-jumper«
Evil-jumper» - это дополнение для «evil-mode», которое заменяет реализацию списка переходов таким образом, чтобы оно более точно имитировало поведение Vim. В частности, он будет пересекать границы буфера и восстанавливать мертвые буферы, если это необходимо. Список переходов также может быть сохранен в файл и восстановлен между сеансами. »
Примечание: я узнал об этом в этой вики
источник
C-o
и какC-i
делать?Если вы используете Icicles, вы можете быстро перемещаться между маркерами в
mark-ring
каждом буфере илиglobal-mark-ring
(в каждом буфере которого есть один маркер).Вы делаете это, используя мультикоманду
C-- C-SPC
(для буфераmark-ring
) илиC-- C-x C-SPC
(дляglobal-mark-ring
). После однократного нажатия клавиши вы используете обычные велосипедные клавиши « Сосульки» и т. Д., Чтобы перемещаться между маркерами кольца.(Те же ключи без префикса arg устанавливают mark (
set-mark-command
) и выдают глобальную mark (pop-global-mark
) соответственно, так же, как в ванильном Emacs.)Текст строки каждого маркера используется в качестве кандидата на завершение. По мере ввода ваш минибуферный ввод сужает кандидатов до тех, которые совпадают (например, сопоставление подстроки или регулярное выражение). Вы можете быстро переключаться между соответствующими маркерами или посетить любой из них напрямую. Вы даже можете изменить порядок сортировки (
C-,
) для езды на велосипеде.источник
Минимальная, но часто полезная возможность - когда вы просто хотите посмотреть другую функцию - это настройка
что возвращает вас к вашей точной начальной позиции курсора при переключении между C-vи M-v.
источник
evil-mode
реализует маркеры Вим-стиль . Вы можете установить маркеры с помощью (m
то естьevil-set-marker
) и перейти к метке с помощью обратной черты `(evil-goto-mark
) или к линии метки'
(evil-goto-mark-line
).Следовательно, вы можете создать метку "a" в первом месте с помощью
ma
, создать метку "b" во втором месте с помощьюma
, а затем'a
перейти к отметке "a" и'b
перейти к отметке "b".источник
используйте имя и код ниже
источник
Последние 20 лет я использую эти два камня:
Я связываю их с C-. и C-, соответственно, и использовать их постоянно, даже не осознавая этого.
Да, регистры и маркеры и тому подобное гораздо более гибкие и мощные, но, тем не менее, это один из тех крошечных быстрых помощников, которые не позволяют мне переключаться на другие редакторы.
источник
Вы также можете воспользоваться макросами, так как они могут быть быстро связаны с удобными клавишами.
Например, запишите переход в положение N с помощью
<F3> M-g g N <F4>
и назначьте его клавише F5 с помощьюC-x C-k b <F5>
. Затем сделайте то же самое с позициями M и F6. Отныне вы можете просто чередовать F5 и F6, чтобы прыгать между N и M.Еще проще, так как
<F4>
выполняет последний записанный макрос и<C-u> F4
следующий за последним, вы можете пропустить шаг привязки клавиш и просто чередовать позиции, используя<F4>
и<C-u> F4
.Еще одна довольно радикальная возможность - создать косвенный буфер в другом окне с помощью
<C-x> 4 c
. Этот буфер имеет такое же содержимое, но может иметь другую позицию точки. Теперь просто чередуйте окна<C-x> o
обычным способом.источник