Emacs: как удалить текст без звонка?
Я бы просто удалил какой-то текст, чтобы я мог вытащить из него другой текст . Как я могу это сделать? C-w разрезает выделенный текст, чтобы убить кольцо, и я заканчиваю без текста, который я хотел выдернуть.
Кроме того, возможно ли прямое выражение текста вместо какого-либо текста, даже не нажимая кнопки, чтобы убить его?
Ответы
Ответ 1
Я печатаю M-x delete-region
довольно часто, но вы можете привязать его к ключу.
С Удалить режим выбора в новых версиях Emacs вам не нужно вводить команду, только начинайте вводить:
По умолчанию вставка текста происходит нормально, даже если знак активен, например, набрав вставку символ "a", затем деактивирует знак. Удалить режим выделения, второстепенный режим, изменяет это поведение: если вы включите этот режим, то вставка текста во время активной метки приведет к удалению текста в регионе. Кроме того, команды, которые обычно удаляют только один символ, например C-d или DEL, будут удалять всю область. Чтобы включить или отключить режим выбора выделения, введите M-x delete-selection-mode.
Ответ 2
Вы можете использовать M-y
после C-y
для вставки предыдущего элемента из кольца уничтожения или использования browse-kill-ring.
Что касается второго вопроса, см. DeleteSelectionMode.
Ответ 3
У меня была такая же проблема. Самое близкое, что я получил до сих пор, - это просто сделать небольшую функцию, которая по существу:
(defun ruthlessly-kill-line ()
"Deletes a line, but does not put it in the kill-ring. (kinda)"
(interactive)
(move-beginning-of-line 1)
(kill-line 1)
(setq kill-ring (cdr kill-ring)))
Ответ 4
Взято из EmacsWiki:
Эквивалент ‘kill-line’
(‘C-k’
), но без побочных эффектов, связанных с кольцом:
(delete-region (point) (line-end-position))
Ответ 5
M-x eval-expression
(setq kill-ring (cdr kill-ring)) - удаляет последний элемент из kill-ring
Ответ 6
Для вашего второго вопроса, альтернативно DeleteSelectionMode, вы можете включить Режим CUA, который дополнительно дает вам режим выбора прямоугольника, разрешенный C-Return. Режим CUA является частью emacs с 22.1.
Ответ 7
Технически, другие ответы неверны в первой части.
Вот моя реализация и мотивация:
(defun delete-word (arg)
"Delete characters backward until encountering the beginning of a word.
With argument ARG, do this that many times."
(interactive "p")
(delete-region (point) (progn (backward-word arg) (point))))
Я адаптировал код здесь от "kill-word
" в simple.el
. Я переключил kill-region
на delete-region
и forward-word
на backward-word
. Таким образом, TRUELY не влияет на kill-ring
, в отличие от других ситуаций, где вне emacs я заметил, что на kill-ring
оказали влияние.
Ответ 8
Нашел ответ на этот вопрос.
Отправлено первым здесь.
;; Ctrl-K with no kill
(defun delete-line-no-kill ()
(interactive)
(delete-region
(point)
(save-excursion (move-end-of-line 1) (point)))
(delete-char 1)
)
(global-set-key (kbd "C-k") 'delete-line-no-kill)
Ответ 9
(defun copy-to-register-z (p1 p2)
"Copy text selection to register named "z"."
(interactive "r")
(copy-to-register ?z p1 p2))
(defun replace-register-content-z (p1 p2)
"Replace register named "z" content."
(interactive "r")
(delete-region p1 p2)
(insert-register ?z))
(global-set-key (kbd "C-c c") 'copy-to-register-z)
(global-set-key (kbd "C-c v") 'replace-register-content-z)
Ответ 10
Добавить эквивалент удаления ключей kill-region и kill-line C-w и C-k следующим образом.
Связан с ключами C-v и C-z.
;; A keybinding to delete-region gives a good "Windows CUT Ctrl-x equivalent".
;; What keybinding to use is awkward to choose.
;; using C-v "Windows PASTE Ctrl-v" is quite a subversive option.
;; C-v = scroll up in emacs which I have no use for.
(global-set-key (kbd "C-v") 'delete-region)
;; To have also a "Windows CUT" alternative to C-k (kill-line) this can be done:
(defun delete-line () "delete line, take it out of kill ring. bind this func to C-z"
(interactive)
(setq last-command 'delete-line)
(kill-line)
(setq kill-ring (cdr kill-ring))
(setq kill-ring-yank-pointer kill-ring)
(setq last-command 'delete-line)
)
(global-set-key (kbd "C-z") 'delete-line)
;; without setting of last-command 2+ C-zs mess up kill-ring
Ответ 11
Мой ответ на первый вопрос: пометьте текст в emacs (с помощью мыши или установочной метки C-SPC
) и нажмите кнопку "< - Backspace" на клавиатуре вместо C-w
. Таким образом, вы все равно можете вставлять текст в системный буфер обмена, не беспокоясь о том, что буфер обмена был переопределен текстом, убитым C-w
Справочная информация для этого ответа: иногда, когда я получал текст за пределами emacs, который я хочу использовать для замены области в emacs, я часто делал ошибку, сначала копируя этот текст в системный буфер обмена (то есть в Windows Ctrl + C
), затем делая C-w
в emacs, чтобы "удалить" область текста, которую я хочу заменить, с надеждой, что более поздний M-w
сможет восстановить мой текст в буфере обмена из kill-ring. К сожалению, буфер обмена будет просто отменен текстом, убитым C-w
, а исходное сообщение в буфере обмена никогда не будет отображаться в kill-ring.
Для второго вопроса да, вы всегда можете пометить текст в emacs сначала, а затем непосредственно C-y
Ответ 12
Большинство функций kill используют kill-region
для выполнения фактической работы с текстом. Я использую макрос lisp для создания функций удаления из функций kill.
(defmacro jpk/delete-instead-of-kill (&rest body)
"Replaces `kill-region' with `delete-region' in BODY."
`(cl-letf (((symbol-function 'kill-region)
(lambda (beg end &optional yank-handler)
(delete-region beg end))))
,@body))
(defun jpk/delete-word (arg)
"Like `kill-word', but does not save to the `kill-ring'."
(interactive "*p")
(jpk/delete-instead-of-kill (kill-word arg)))
Ответ 13
Здесь версия kill-region
, которая не заставляет значения в kill-ring.
(defun kill-or-delete-region (beg end prefix)
"Delete the region, storing it in the kill-ring.
If a prefix argument is given, don't change the kill-ring."
(interactive "r\nP")
(if prefix
(delete-region beg end)
(kill-region beg end)))
(global-set-key (kbd "C-w") 'kill-or-delete-region)
Это позволяет вам делать C-w
по-прежнему, но C-u C-w
теперь удаляет текст без изменения kill-ring.
Ответ 14
как удалить текст без звонка?
функция delete-region
удалит выбранную область, не добавляя ее в кольцо уничтожения
Кроме того, возможно ли прямое копирование текста вместо некоторого текста даже не нажимая кнопки, чтобы убить его?
Я думаю, вы спрашиваете, как заменить текст в выбранном регионе тем, что вы уже положили на кольцо kill.
Настройка (delete-selection-mode 1)
позволит вам выдернуть/вставить по выбранной области. Он также позволяет вам просто набирать и заменять выбранную область.
В версии 25.1.1 на OS X мне также пришлось добавить (setq select-enable-primary nil)
, чтобы он не копировал выбранную область в кольцо kill