Копирование :
, Если Вы часто работаете со строками, Вы могли бы хотеть сделать копию (kill-ring-save
) и сократить (kill-region
) работа над строками, когда никакой регион не выбран:
(defadvice kill-ring-save (before slickcopy activate compile)
"When called interactively with no active region, copy a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
"When called interactively with no active region, kill a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
Тогда можно скопировать строку только с M-w.
Вставка :
Часто аргумент префикса просто выполняет действие многократно, таким образом, Вы ожидали бы, что C-u 10 C-y будет работать, но в этом случае C-y использует свой аргумент для значения, какой элемент уничтожать-кольца "дергать" (вставляют). Единственное решение, о котором я могу думать, - то, что говорит kronoz: запишите макрос с C-x (C-y C-x) и затем позвольте аргументу C-u перейти в kmacro-end-and-call-macro
вместо этого (это - C-u 9 C-x e или даже просто C-9 C-x e или M-9 C-x e).
Иначе : можно также просто остаться в M-x viper-mode
и использовать yy10p:)
можно использовать макрос клавиатуры для этого:-
C-a C-k C-x (C-y C-j C-x) C-u 9 C-x e
Объяснение:-
Можно знать это, но для многие префикс команд a "C-u 10" добьется цели. К сожалению для команды рывка C-y "C-u" переопределен для значения, "возвращаются, что много объектов в кольце уничтожения, и дергают тот объект".
я думал, что Вы могли бы быть в состоянии использовать копию к регистру и команды вставлять-регистра с командой префикса C-u, но по-видимому который не работает также.
Также C-x z, "повторная последняя команда", кажется, неуязвима для C-u.
Другая мысль должна была бы использовать M-: получить подсказку Оценки и тип в небольшом количестве elisp. Я думал, что что-то как (dotimes '10 'рывков) могло бы сделать это, но это не кажется.
, Таким образом, это похоже, использование C-u на макросе может действительно быть лучшим, чтобы можно было сделать за исключением записи собственной небольшой функции.
Имел меня голосование, я буду голосовать за ответ kronoz.
Вот функция, которую я взял от порта OS/2 Emacs. (Да, я использовал Emacs некоторое время.)
;; Author: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
(defun emx-dup-line (arg)
"Duplicate current line.
Set mark to the beginning of the new line.
With argument, do this that many times."
(interactive "*p")
(setq last-command 'identity) ; Don't append to kill ring
(let ((s (point)))
(beginning-of-line)
(let ((b (point)))
(forward-line)
(if (not (eq (preceding-char) ?\n)) (insert ?\n))
(copy-region-as-kill b (point))
(while (> arg 0)
(yank)
(setq arg (1- arg)))
(goto-char s))))
я имею, который связал с F9 d:
(global-set-key [f9 ?d] 'emx-dup-line)
Тогда я использовал бы C-u 10 F9 d для дублирования строки 10 раз.
Единственным путем я знаю, чтобы повторить, что произвольные команды должны использовать "повторение аргументом" функция макросов клавиатуры.
C-пространство C-a вниз M-w C-x (C-y C-x) C-9 C-x e
Это довольно слабо по сравнению с энергией. Но только потому, что энергия удивительно эффективна в этом виде вещи.
, Если Вы действительно тоскуете по модальному подобному vi взаимодействию, Вы могли бы использовать один из vi режимов эмуляции, таких как режим гадюки. Зарегистрируйтесь в разделе "Emulation" emacs руководства онлайн.
Вы захотите уничтожить строку: C-a C-k, и затем C-y или?
Я не знаю о прямом эквиваленте (C-y 10 раз является лучшим, я знаю), но можно интересоваться Гадюкой, которая является vi пакетом эмуляции для emacs. Это - часть стандарта emacs распределение.
Вы получаете строку с C-k, Вы заставляете следующую команду произойти десять раз с C-u 10, тогда Вы вставляете строку с C-y. Довольно простой.
, Если Вы всегда хотите, чтобы C-k сделал целую строку, можно установить kill-whole-line на t. Больше игры с C-a или C-e.
существует много, можно сделать с необычными кольцами уничтожения, регистрами и макросами, и я поощряю Вас изучать их, но дергание строки десять раз не должно быть жестким или странным.
В этом примере вам не нужны и Cx), и Cx e.
Вы можете просто передать аргумент повторения прямо в Cx). Это останавливает запись и повторяет макрос за один шаг. Или вы можете пропустить Cx) и сразу перейти к Cx e, так как Cx e завершит запись до выполнения повторов.
Какой способ выбрать, зависит от того, как вам нравится работать с подсчетом повторов. Для Cx) вы говорите, сколько повторов вы хотите всего (в данном случае 10). Для Cx e вам нужно указать, сколько еще повторов осталось (например, 9).
Ca Ck Ck также уничтожит завершающий символ новой строки, поэтому вам не придется возвращать его позже. Это быстрее, чем использование метки, и вам не нужно изменять какие-либо переменные.
Еще лучше (если вы не находитесь в терминале), вы можете использовать CS-Backspace *, чтобы уничтожить всю строку,
[* Если вы используете X windows, не забудьте ввести shift ( не alt), иначе вы можете завершить сеанс!]
Говоря о терминалах, M-9 - хорошая альтернатива если вы обнаружите, что не можете ввести C-9.
В Emacs 22 и выше по умолчанию F3 запускает макрос, а F4 завершает / повторяет макрос. Вы просто нажимаете F3, чтобы начать запись, нажимаете F4, когда закончите, и снова нажимаете F4, чтобы повторить макрос. (F4 также принимает аргумент.)
Собираем все вместе, чтобы получить 10 копий текущей строки:
Не совсем так, как yy 10 p, но довольно близко. :)
Основываясь на ответе Баксиссимо, я отказался от этого:
(defun yank-n-times (arg)
"yank prefix-arg number of times. Not safe in any way."
(interactive "*p")
(dotimes 'arg (yank)))
Установите для него какой-то ключ, вызовите его с аргументом префикса, и вперед.
edit (также изменен интерактивный вызов выше, чтобы быть менее паршивым)
Или вот версия, которая может вроде как заменить yank-pop:
(defun yank-n-times (&optional arg)
"yank prefix-arg number of times. Call yank-pop if last command was yank."
(interactive "*p")
(if (or (string= last-command "yank")
(string= last-command "yank-pop"))
(yank-pop arg)
(if (> arg 1)
(dotimes 'arg (yank))
(message "Previous arg was not a yank, and called without a prefix."))))
сообщение является своего рода ложью, но вы не должны вызывать его без префикса больше 1 в любом случае, так.
Не уверен, что это хорошая идея, но я заменил My на это, я посмотрю, как это пойдет.