Emacs でホーム キーをスマートに動作させることはできますか? スマートとは、文字番号 0 に移動する代わりに、最初の非空白文字に移動し、2 回目のプレスで 0 に移動し、3 回目のプレスで最初の非空白文字に戻るということです。スマートエンドもいいですね。
7 に答える
(defun smart-beginning-of-line ()
"Move point to first non-whitespace character or beginning-of-line.
Move point to the first non-whitespace character on this line.
If point was already at that position, move point to beginning of line."
(interactive "^") ; Use (interactive) in Emacs 22 or older
(let ((oldpos (point)))
(back-to-indentation)
(and (= oldpos (point))
(beginning-of-line))))
(global-set-key [home] 'smart-beginning-of-line)
スマートエンドが何をするのかよくわかりません。通常、末尾の空白がたくさんありますか?
注:この関数と Robert Vuković の関数の主な違いは、カーソルが既にそこにあったとしても、最初のキー押下で常に最初の非空白文字に移動することです。その場合、私のものは列0に移動します。
また、彼は私が使用した(beginning-of-line-text)
場所を使用し(back-to-indentation)
ました。これらは非常に似ていますが、いくつかの違いがあります。 (back-to-indentation)
行の最初の非空白文字に常に移動します。 (beginning-of-line-text)
重要でないと見なされる非空白文字を通過することがあります。たとえば、コメントのみの行では、コメント マーカーではなく、コメントのテキストの最初の文字に移動します。ただし、どちらの関数も、どちらの動作を好むかによって、どちらの回答でも使用できます。
これは GNU Emacs で動作しますが、XEmacs では試していません。
(defun My-smart-home () "Odd home to beginning of line, even home to beginning of text/code."
(interactive)
(if (and (eq last-command 'My-smart-home)
(/= (line-beginning-position) (point)))
(beginning-of-line)
(beginning-of-line-text))
)
(global-set-key [home] 'My-smart-home)
この便利な機能に感謝します。今はずっと愛用して使っています。1 つだけ小さな変更を加えました: (interactive) は (interactive "^") になります。
emacs ヘルプより: 文字列が shift-select-mode で始まる場合、^' and
非 nil の場合、Emacs は最初に関数 `handle-shift-select' を呼び出します。
基本的に、これにより、shift-select-mode を使用している場合、現在の位置から行の先頭まで shift-home が選択されます。これは、ミニバッファーで特に役立ちます。
最初のスマートホーム関数に実行させたいこと、つまり、行の最初の非空白文字に移動する、インデントに戻る関数が既にあることに注意してください。デフォルトでは Mm にバインドされています。
まさにそれを行うパッケージがありますmwim
(Move Where I Mean)
@Vucovic コードをbeggining-of-line
最初にジャンプするように調整します。
(defun my-smart-beginning-of-line ()
"Move point to beginning-of-line. If repeat command it cycle
position between `back-to-indentation' and `beginning-of-line'."
(interactive "^")
(if (and (eq last-command 'my-smart-beginning-of-line)
(= (line-beginning-position) (point)))
(back-to-indentation)
(beginning-of-line)))
(global-set-key [home] 'my-smart-beginning-of-line)