что называется кольцом в Emacs? - PullRequest
6 голосов
/ 15 октября 2010

В отличие от самоочевидных команд копирования / вырезания / вставки в стиле Windows, я не мог понять концепцию ring в emacs.

Поскольку я не очень часто программирую в emacs, я мог бы иметьне понял значение функции кольца.Можете ли вы сказать мне, что называется кольцом в Emacs и как его использовать?

Ответы [ 5 ]

12 голосов
/ 16 октября 2010

Хорошо, позвольте мне попробовать простыми словами. Каждый раз, когда вы копируете ( Mw ) или вырезаете ( Cw ), выделение вставляется в top так называемого кольца (которое похоже на закрытый конец список).

Интересная часть приходит после. Теперь, если вы вставите с помощью C-y , то самая последняя вставленная область (которая теперь является front элементом кольца) будет вставлена ​​в буфер. Если вы продолжите нажимать My , то текст будет последовательно заменен старыми и старшими элементами из кольца, то есть кольцо будет повернуто, а более старый текст обозначен как front element каждый раз. Это дает вам доступ к старому вырезанному / скопированному тексту.

На этом полезная часть не заканчивается. Если вы вырезаете / копируете какой-либо другой текст, он будет вставлен в верх кольца, и кольцо будет снова повернуто так, что верх теперь будет спереди . И вы можете снова запустить последовательность C-y M-y , добавив новый текст, обозначенный как front .

Итак, подытожим:

  • top кольца - это место, где вставляется вновь скопированный / вырезанный ( M-w / C-w ) текст. Когда это происходит, элемент top становится элементом front .
  • элемент front кольца - это место, в котором работают команды вставки (aka yank) C-y и M-y , вставляя его в буфер. M-y также вращает кольцо, так что более старый текст в кольце становится front .

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

alt text

4 голосов
/ 15 октября 2010

Каждый раз, когда вы копируете или вырезаете что-то в буфер обмена в Windows, вы теряете то, что было в вашем буфере обмена раньше. (Хотя некоторые программы будут хранить предыдущее содержимое буфера обмена для вас) Emacs "ring" будет хранить старое содержимое буфера обмена даже после того, как вы скопируете / yank / cut / kill вещи. Это может быть удобно, если вы привыкнете к этому, потому что оно позволяет вам хранить более одной вещи в буфере обмена одновременно и уменьшает вероятность случайной перезаписи того, что вы вырезали в буфере обмена, как в Windows.

3 голосов
/ 15 октября 2010

Кольцо представляет собой кольцевой буфер. Подумай о ролодексе.

Если вы убиваете / дергаете на ринге, тогда вы можете идти вперед и назад в своей истории.

2 голосов
/ 30 октября 2010

В Ubuntu с установленным пакетом emacs-goodies-el:

Нажмите C-( M-x browse-kill-ring RET C-)

Это определяет временный макрос клавиатуры, который вызывает browse-kill-ringкогда вы нажимаете C-x e.

Теперь вам не нужно просто читать о списке убийств, вы можете увидеть, что в нем находится.

Поэкспериментируйте с C-w (вырезать),M-w (копия), C-y (дергать) и C-y M-y (дергать следующий в ринге) и нажмите C-x e, чтобы увидеть эффект от списка убийств.

1 голос
/ 15 октября 2010

Из руководства Emacs : "Кольцо - это структура данных фиксированного размера, которая поддерживает вставку, удаление, поворот и индексированные по модулю ссылки и обход". Другими словами, это круговая очередь .

...