一部のテキストを削除して、代わりに他のテキストをヤンクできるようにします。どうやってやるの?Cwは選択したテキストをカットしてリングを強制終了し、ヤンクしたいテキストが表示されなくなります。
また、ボタンを押して終了することなく、一部のテキストの代わりに直接テキストをヤンクすることは可能ですか?
一部のテキストを削除して、代わりに他のテキストをヤンクできるようにします。どうやってやるの?Cwは選択したテキストをカットしてリングを強制終了し、ヤンクしたいテキストが表示されなくなります。
また、ボタンを押して終了することなく、一部のテキストの代わりに直接テキストをヤンクすることは可能ですか?
回答:
私はM-x delete-region
かなり頻繁に入力しますが、キーにバインドすることができます。
削除]選択モードのEmacsの新しいバージョンでは、あなただけの入力を開始コマンドを入力する必要はありません。
デフォルトでは、テキストの挿入は、マークがアクティブな場合でも通常どおりに行われます。たとえば、挿入を入力すると、文字「a」が挿入され、マークが非アクティブになります。マイナーモードである削除選択モードは、この動作を変更します。このモードを有効にすると、マークがアクティブなときにテキストを挿入すると、領域内のテキストが最初に削除されます。また、通常はただ一つの文字を削除するコマンドなど、C-dまたはDEL、代わりに全領域を削除します。選択の削除モードのオンとオフを切り替えるには、次のように入力します
M-x delete-selection-mode.
delete-region
Backspaceがバインドするようになったため、キーにバインドする必要さえありません。Backspaceは、選択された領域を強制終了する代わりに削除します。つまり、Backspaceは、選択されたテキストを保存/強制終了リングにプッシュせずに消去します。値がためですdelete-active-region
ですt
あなたには、いくつかの他の値にそれをカスタマイズしていない限り。
M-y
afterC-y
を使用して、キルリングから前のアイテムを挿入するか、browse-kill-ringパッケージを使用できます。
2番目の質問については、DeleteSelectionModeを参照してください。
私も同じ問題を抱えています。私がこれまでに得た最も近いことは、本質的に次のような小さな関数を作成することです。
(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)))
Mx eval-expression(setq kill-ring(cdr kill-ring))-kill-ringから最後のアイテムを削除します
2番目の質問では、DeleteSelectionModeの代わりに、CUAモードを有効にすることができます。これにより、C-Returnによって有効になる優れた長方形選択モードが追加で提供されます。CUAモードは22.1以降emacsの一部です。
ほとんどの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)))
cl-letf
動的スコープを持つ関数のローカルバインディングを作成できます。つまり、はcl-letf
、内のコードに対してのみ有効ですが、呼び出しツリー全体に適用されます(たとえば、にkill-region
直接表示されるのでbody
はなく、kill-word
呼び出しが行われ、がにkill-region
置き換えられますdelete-region
)。
cl-letf
。 その意味でのcl-letf
ようlet*
に動作します。
これが私の実装と動機です:
(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
。このようにkill-ring
、emacsの外で、kill-ring
が影響を受けていることに気付いた他の状況とは異なり、それは本当に影響を与えません。
(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”'s 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)
次のように、kill-regionキーとkill-lineキーCwおよびCkに相当する削除を追加します。キーCvおよびCzにバインドされています。
;; delete-regionへのキーバインドは、優れた「Windows CUTCtrl-x相当」を提供します。 ;; どのキーバインディングを使用するかは、選択するのが面倒です。 ;; Cvの使用「WindowsPASTECtrl-v」は、かなり破壊的なオプションです。 ;; Cv =私が役に立たないemacsで上にスクロールします。 (global-set-key(kbd "Cv") 'delete-region) ;; Ck(キルライン)の代わりに「WindowsCUT」を使用するには、次のようにします。 (defun delete-line() "行を削除し、キルリングから取り出します。この関数をCzにバインドします。" (インタラクティブ) (setq last-command'delete-line) (キルライン) (setq kill-ring(cdr kill-ring)) (setq kill-ring-yank-pointer kill-ring) (setq last-command'delete-line) ) (global-set-key(kbd "Cz") 'delete-line) ;; 最後のコマンドを設定せずに2 + C-zsがキルリングを台無しにする
最初の質問に対する私の答え:emacsでテキストをマークし(マウスまたはセットマークを使用C-SPC
)、キーボードの「<-Backspace」ボタンをC-w
。の代わりに押します。このようにして、クリップボードがによって殺されたテキストによって上書きされることを心配することなく、システムクリップボードのテキストを貼り付けることができますC-w
この回答の背景:emacsの領域を置き換えるために使用したい、emacsの外部のテキストを取得したとき、最初にそのテキストをシステムクリップボード(つまりWindows Ctrl + C
)にコピーし、次にC-w
emacsで "を実行することで間違いを犯すことがよくありました。後でM-w
クリップボード内のテキストをkill-ringから復元できることを期待して、置き換えたいテキストの領域を削除します。残念ながら、クリップボードはによって強制終了されたテキストによって上書きされるだけC-w
であり、クリップボード内の元のメッセージが強制終了リングに表示されることはありません。
2番目の質問の場合、はい、いつでも最初にemacsでテキストをマークし、次に直接マークすることができます C-y
これはkill-region
、値を強制終了リングに強制しないバージョンです。
(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
、キルリングを変更せずにテキストを削除するようになりました。
キルリングなしでテキストを削除する方法は?
このdelete-region
関数は、選択した領域をキルリングに追加せずに削除します
また、ボタンを押して終了することなく、一部のテキストの代わりに直接テキストをヤンクすることは可能ですか?
選択した地域のテキストを、すでにキルリングに置いているものに置き換える方法を尋ねていると思います。
設定 (delete-selection-mode 1)
すると、選択した領域にヤンク/貼り付けできます。また、選択したリージョンを入力して置き換えることもできます。
OS XIのバージョン25.1.1では(setq select-enable-primary nil)
、選択した領域がキルリングにコピーされないように追加する必要もありました。