2013-05-14 4 views
3

В руководстве сказано, что если вы последовательно используете область убийства, тексты, которые вы убиваете, будут объединены в одну из бит-кольца.
Я просто смущен, как это работает. Так что я попытался Eval это в поцарапать буфер:emacs, как вызвать kill-region несколько раз?

(progn 
    (kill-region 1 5) ; this kills ";; T" 
    (kill-region 1 5)); this kills "his " 

, что я ожидаю, что, поскольку я использую Убивать регион 2 раза, убитые тексты должны быть объединены в один в уничтожениях кольца.
, но когда я использую C-y, я получаю только «его».
Так что у меня 2 вопроса здесь:

  • в сюсюкать, как вызвать убийство-область несколько раз так, что убитые тексты сцепляются?

  • используя клавиатуру C-w, как вызвать группу kill несколько раз, чтобы убитые тексты были объединены? так как типичный рабочий процесс - это область-убийца (C-w), затем переместите курсор, а затем область kill снова.

вот док-строка области убийства. не является вторым абзацем, а последний абзац противоречивым?

"Kill (\"cut\") text between point and mark. 
This deletes the text from the buffer and saves it in the kill ring. 
The command \\[yank] can retrieve it from there. 
\(If you want to save the region without killing it, use \\[kill-ring-save].) 

If you want to append the killed region to the last killed text, 
use \\[append-next-kill] before \\[kill-region]. 

If the buffer is read-only, Emacs will beep and refrain from deleting 
the text, but put the text in the kill ring anyway. This means that 
you can use the killing commands to copy text from a read-only buffer. 

Lisp programs should use this function for killing text. 
(To delete text, use `delete-region'.) 
Supply two arguments, character positions indicating the stretch of text 
to be killed. 
Any command that calls this function is a \"kill command\". 
If the previous command was also a kill command, 
the text killed this time appends to the text killed last time 
to make one entry in the kill ring." 
+0

Можете ли вы указать, где в документации вы нашли информацию? – choroba

+0

для меня это работает только после повторных C-k, на клавиатуре. –

+0

- это определение функции kill-region.(Я читал вставку lisp) –

ответ

4

Документация относится к командам, а не к функциям. Команда - это функция , которая инициирует command loop.

Любая команда, вызывающая эту функцию, является командой «kill». Если предыдущая команда была также командой kill, текст, убитый на этот раз, добавляется к тексту, убитому в последний раз , чтобы сделать одну запись в кольце убийства.

Это не означает kill-region как таковой. Он говорит, что любая команда, которая вызывает функцию kill-region, становится «командой kill» (включая kill-region ). Например. kill-linekill-word и т.д.

  • в сюсюкать, как взывают Убивать регион несколько раз так, что убитые тексты сцепляются?

Использование kill-append.

(progn 
    (kill-region 1 5) ; this kills ";; T" 
    (kill-region 1 5)); this kills "his " 

, что я ожидаю, что, поскольку я использую Убивать регион 2 раза, убитые тексты должны быть объединены в один в уничтожениях кольца.

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

+0

Вы имеете в виду, что это считается функцией при вызове внутри lisp, когда она считается командой при вызове с использованием клавиатуры? –

+0

Команда также может быть инициирована с помощью 'call-interactiveively' –

+0

David Dai: вы должны следовать ссылке event_jr для деталей (или' C-h i g (elisp) Command Loop RET') – phils