簡単に言うと、vimや他のほとんどのエディターのようなemacsでスクロールしようとしています。たとえば、私が下/上から2行、下/上(Ctrl-p、n、 ↑、↓)画面の半分ではなく、上下に1行だけ移動します。
画面を正確に配置する場合は、Ctrl-Lを使用できます。
デフォルトでは、現在の行を画面の中央に配置します。
ESC 0 Ctrl-Lは、現在の行を一番上に配置します。
EmacsWIkiに関するいくつかの提案を参照してください。
(setq scroll-step 1 scroll-conservatively 10000)
私はパーティーに少し遅れていますが、パッケージのインストールを気にしない場合は、smooth-scrolling( github =、 [〜#〜] melpa [〜#〜] )でもお探しの場合があります。
インストールしたら、init.elに以下をポップできます。
(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)
最後の行はオプションです。スクロールを開始しますnear画面の端ではなく、端にあるため、常にポイントの周りに小さなコンテキストがあります。好みに合わせて調整してください。
私の解決策は、Emacのデフォルトのスクロールを変更するのではなく、マクロからキーシーケンスコマンドを作成することです。このようにして、必要なときに一度に1行ずつスクロールする便利な方法があります。理想的ではありませんが、非常に簡単です。 M ↓)とM-(↑)が利用できるのはたまたまあるので、それを使用しました。
これは私がやった方法です。最初に、上下に1行スクロールするマクロを記録する必要があります。
マクロを開始
C-x (
下にスクロール
C-u 1 C-v
停止マクロ
C-x )
上にスクロールするには、次を使用します
C-u 1 M-v
次に、マクロに名前を付ける必要があります。
M-x name-last-kbd-macro
次のようなプロンプトが表示されたら、名前を付けます。
down-one-line
次に、次のコマンドを使用して、キーシーケンスをそのコマンド名にバインドします。
M-x global-set-key
プロンプトが表示されたら、次のようなものを使用します。
M-(down arrow)
次に、どのコマンドをバインドするかを尋ねられますので、以前に作成した名前(たとえば、1行下)を指定する必要があります。
ここにこの情報があります。また、マクロを.emacsファイルに追加する手順については、以下および他の場所をご覧ください。
---(ここ マクロ定義の説明
ここ スクロールの制御方法
2000年から.emacs
ファイルでこれらを使用しています。
(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward))
このようにして、Emacsのデフォルトの動作を維持し、何をしているのかに応じて、一度に1行ずつスクロールできます。
これは少なくともGNU Emacs 22.まで動作しました。最近Emacs 24にアップグレードし、View-scroll-line-forward
とView-scroll-line-backward
が使用できなくなったことを発見しました。スクロールアップ行とスクロールダウン行が機能するため、Emacs 24を使用している場合は、これを使用できます。
(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line))
私はほとんどEmacs 23をスキップしたので、それがあなたが使用しているバージョンであるなら、あなたは上記の両方で実験することができます。
注:scroll-up-line
は実際に1行スクロールしますdown。これはbufferが1行上に移動されるためです。
矢印キーを再バインドして、スクロール操作を実行します。
(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))
(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))
シンプルにこれを行います:
(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))
次に、メタカーソルを上に移動し、メタカーソルを下に移動します。
QED。上記のすべての人が喫煙していたかわからない!
.emacsファイルに次のものがあり、ニースctrl-up、ctrl-downスクロール動作を有効にします。マウスホイールにもこれを使用します。
(defun scroll-down-in-place (n)
(interactive "p")
(previous-line n)
(scroll-down n))
(defun scroll-up-in-place (n)
(interactive "p")
(next-line n)
(scroll-up n))
(global-set-key [mouse-4] 'scroll-down-in-place)
(global-set-key [mouse-5] 'scroll-up-in-place)
(global-set-key [C-up] 'scroll-down-in-place)
(global-set-key [C-down] 'scroll-up-in-place)
M-x customize-variable scroll-conservatively
1に設定します。
しかし、あなたは本当にこれをしたくありません。
を使用するのは面倒な場合があるため M-up、 M-down これらのコマンドをオーバーロードする組織モードに干渉するためです。この問題を回避するために、私は個人的にこれらのコマンドを組み合わせて使用します M-page-upM-page-down「ここで、スクロールを上下に1行に定義しました。
;;;scroll by `number-of-lines' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-down number-of-lines)
(forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-up number-of-lines)
(forward-line number-of-lines))))
;;;scroll by `number-of-lines' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
(scroll-up number-of-lines))))
「vim」スクロールを使用して、これを.emacsファイルに追加するには:
(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") 'next-line-and-recenter)
(global-set-key (kbd "C-p") 'previous-line-and-recenter)
スクロールのような効果をすばやく作成する方法を探している場合は、C-n
およびC-l
カーソルを下に移動してから中央に移動します。
.xsessionでemacsを起動すると、私の場合はscroll-conservativelyを100+に設定しても機能せず、スクロールステップ1も機能しません。ただし、Xの後にemacsを起動すると機能します。