GNU Emacsで1行ずつスクロールする方法は?


87

簡単に言うと、vimや他のほとんどのエディターのようにemacsでスクロールしようとしています。私は、トップ/ボトムから2行は、例えばだ、と私は、アップ/ダウンを押したときに(Ctrl- 、pnそれだけで1行上または下に、いない画面の半分を行きます。


5
私はこれが決して修正されないと確信しています。それは過去90年代には欠陥でしたが、2010年にはまだここで壊れています
Steve Kuo

12
@Steve Kuo:バッシングを終了します-これは設計どおりに機能しますが、簡単な設定で変更(または「修正」)できます。
テディ

17
@Teddyとこの「簡単な設定」とは何ですか?
スティーブクオ2012年

1
@テディええ、それは何ですか?
スクーター

@Rook:実際にはz.、Emacsの感覚を得るためにvimでより頻繁に使用することをお勧めします;-)珍しいかもしれませんが、実際には、IMHOを1行ずつスクロールするよりも便利です。
U.Windl19年

回答:


51

EmacsWIkiに関するいくつかの提案を参照してください。

(setqスクロール-ステップ1
      スクロール-控えめに10000)

3
実際にそれを見ました-あなたとjrockwayの両方の答えですが、Wikiでは両方とも推奨されていません。残念ながら、その理由は明確に説明されていません。だから私は、誰かが欠陥のない方法を見つけてくれることを期待して、質問を投稿しました。
ルーク

1
なぜこれが推奨されないのかわかりません。私は同様の構成を使用していて、それは非常にうまく機能しています。さらに確実にするには、次のスクロールステップのドキュメントを参照してください(最後の文に注意してください)。*ポイントが移動するまでにウィンドウをスクロールしようとする行数。それでもポイントをフレームに戻すことができない場合は、代わりにポイントが中央に配置されます。これがゼロの場合、ポイントはフレームから外れた後、常に中央に配置されます。スクロールを常に一度に1行にしたい場合は、これを1に設定するのではなく、「scroll-conservatively」を大きな値に設定する
必要

ええ、もう少し周りを見回すと、ウィキのその注意書きをバックアップするためにこれ以上見ることはありません。たとえば、スクロールステップはグーグル検索による複数の.emacsファイルで非常に一般的であるようです。たぶん、wikiの作者は古いバージョンのemacsを参照していますか?
ars

で問題が発生したことはありませんscroll-conservatively。これに対する警告は少し奇妙です-それが問題を引き起こす場合は、init.elから行を削除するのは簡単です!
dbr 2011年

1
@ arsgroups.google.com/group/gnu.emacs.help/browse_thread/thread/…したがって、emacs <23.1で大きなファイルの場合、カーソルが中央にジャンプすることがありますが、これは最大の問題ではないようです
dbr 2011年

51

画面を正確に配置したい場合は、Ctrl-Lを使用できます。

  • デフォルトでは、現在の行を画面の中央に配置します。

  • ESC 0 Ctrl-Lは、現在の行を一番上に配置します。


14
これを誤解しないでください、しかしそれは行ごとにスクロールすることと何の関係がありますか?(つまり質問)
ルーク

9
手元のツールで(著者の意見では)より自然な代替ワークフローを提供することは合理的です。ただし、その前にその趣旨の免責事項を付け、可能な限りこのアプローチが「優れている」理由を説明する必要があります。
dmckee ---元モデレーターの子猫

2
@ dmckee-私はvimを使ってきました...うーん、長い間。とても良いです。しかし、私はlispで何かをしているので、少なくとも再びemacsを理解するように強制し始めました。この「代替」の移動方法は、現時点ではあまりにも多すぎます。チュートリアルを読んで、それを知ってください...しかし、それはあまりにも奇妙です、私見。自然ではありません。
ルーク

1
@Idigas:もちろんです。それは公平であり、starblueのアドバイスを受ける必要はありません。しかし、私は答えのこの種は考えることができ、それがアップフロントであると説得力のある説明が含まれている場合に有用です。
dmckee ---元モデレーターの子猫

1
はい、これは数回のキーストロークで機能します。(「行ごとにスクロールする方法」をグーグルで検索したのは、「コードを目的の場所に移動する方法」を検索するのに便利な方法のように思えたからです。)ありがとうございます。
ennael 2015

42

私はパーティーに少し遅れていますが、パッケージをインストールしてもかまわない場合は、スムーズスクロールgithubMELPAでも利用可能)があなたが探しているものかもしれません-それは確かに私にとってはうまくいきます。

インストールしたら、init.elに次をポップできます。

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

最後の行はオプションです。画面の端ではなく端の近くでスクロールを開始するので、ポイントの周りに常に小さなコンテキストがあります。好みに合わせて調整します。


7
これを読んだとき、私は泣き崩れました。これが質問への答えであることは間違いありません。
エリックブラウン

3
はい、Emacsを試しているVimユーザーとして、これはまさに私が探していたものです。
juanjux 2014

私はこのソリューションとスクロールステップソリューションの両方を使用しました。下から6行目に移動して下に押すと、1行スクロールし、上から同じように、この組み合わせは魅力的です。
Emad Elsaid 2016年

残念ながら、occur-modeやsearchingなどを使用してファイルをジャンプしているときに、スムーズスクロールが失敗することがよくあります。どちらもポイントを画面外に移動する可能性があり、結果を表示するにはCLを押す必要があります。
エリックノウルズ

27

私の解決策は、Emacのデフォルトのスクロールを変更するのではなく、マクロからキーシーケンスコマンドを作成することです。このようにして、必要なときに一度に1行ずつスクロールする便利な方法があります。理想的ではありませんが、とても簡単です。たまたまM-(↓)とM-(↑)が使えるので、それを使ってみました。

これが私がやった方法です。まず、上下に1行スクロールするマクロを記録する必要があります。

マクロを開始

C-x ( 

1つ下にスクロールします

C-u 1 C-v

マクロを停止します

C-x )

1つ上にスクロールするには、

C-u 1 M-v

次に、マクロに名前を付ける必要があります。

M-x name-last-kbd-macro

次のようにプロンプ​​トが表示されたら、名前を付けます。

down-one-line

次に、以下を使用して、キーシーケンスをそのコマンド名にバインドします。

M-x global-set-key

プロンプトが表示されたら、次のようなものを使用します。

M-(down arrow)

次に、バインドするコマンドを尋ねられます。たとえば、1行下など、以前に発明した名前を付ける必要があります。

ここで私はこの情報を入手しました。マクロを.emacsファイルに追加する方法については、以下および他の場所で説明することもできます。

マクロ定義の説明はこちら

スクロールを制御する方法についてはこちら


22

私は.emacs2000年からファイルでこれらを使用しています。

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

このようにして、Emacsのデフォルトの動作を維持するだけでなく、実行内容に応じて一度に1行ずつスクロールすることができます。

これは少なくともGNUEmacs22まで機能しました。最近Emacs24にアップグレードしたところ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)) 

私はほとんどEmacs23をスキップしたので、それが使用しているバージョンである場合は、上記の両方を試すことができます。

注:バッファーは1行上に移動されるため、scroll-up-line実際には1行にスクロールします。


おかげで、この作品...しかし、私はここについて尋ねてきた別の問題がヒット:stackoverflow.com/questions/19256551/...
scorpiodawg

13

矢印キーを再バインドして、スクロール操作を実行します。

(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)))

2
これは私が探していたものではありません。画面をスクロールさせたくないのですが(スクロールロックが有効になっているため)、画面を「移動」させたいのですが...ああ、...メモ帳のやり方です:)
Rook

12

Simplesはこれを行います:

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

次に、メタカーソルが上に移動し、メタカーソルが下に移動します。

QED。上記のすべての人々が何を吸っていたのかわからない!


または、先ほど投稿したように、スクロールアップラインとスクロールダウンラインを使用できます。
Rajesh J Advani 2013

5

私の.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)

私はこれを試したばかりですが、それは私が探していた動作ではありません。それはあなたが画面の最後の行に行くことを可能にします、しかしそれはそれでも「数行上に画面をぎくしゃくさせます」...それをよりよく説明する方法がわかりません。
ルーク2012年

マウスホイールをマッピングするというアイデアが好きです。しかし、独自の関数を定義する代わりに、組み込みのView-scroll-line-forwardおよびView-scroll-line-backward(または新しいscroll-up-lineおよびscroll-down-line)は機能しませんか?
Rajesh J Advani 2013

2

「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)

@Mattそれは私のためにする
jjpikoov

2

を使用するのは煩わしい場合があるためM-upM-downこれらのコマンドをオーバーロードするorg-modeに干渉するためです。この問題を回避するために、私は個人的にM-page-up M-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))))

1

M-x customize-variable scroll-conservatively

1に設定します。

しかし、あなたは本当にこれをしたくありません。


5
実際にそれを見ました-あなたとarsの両方の答えですが、Wikiでは両方とも推奨されていません。残念ながら、その理由は明確に説明されていません。だから私は、誰かが欠陥なく機能する方法を見つけてくれることを期待して、質問を投稿しました。
ルーク

3
なぜこれが良い考えではないのか、私たちの初心者のために説明できれば便利です。
ダニエル

これが適切でない理由を私が考えることができる唯一の理由は、スクロールが遅くなることです。デフォルトの半分の画面ではなく、常に一度に1行ずつスクロールする必要があります。(私は推測しますか?)
ShreevatsaR 2011年

1

スクロールのような効果をすばやく作成する方法を探している場合は、入力しC-nC-l順番にカーソルを下に移動し、中央に配置します。


0

.xsessionでemacsを起動した場合、私の場合、scroll-conservativelyを100+に設定しても、スクロールも機能しません-ステップ1。ただし、Xの後にemacsを起動すると、動作します。


0

マウスを使用してもかまわず、スクロールホイールがある場合は、次のいずれかの方法で変数mouse-wheel-scroll-amountをカスタマイズできます。

Ch v mouse-wheel-scroll-amount([カスタマイズ]をクリックし、値を[特定の行数] 1、ApplyAndSaveに変更します。)

または、.emacsに次の行を追加します: '(mouse-wheel-scroll-amount'(1((shift)。1)((meta))((control)。text-scale)))

https://www.emacswiki.org/emacs/Scrollingにリストされている可能性はたくさんあり ます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.