GNU Emacs'ta satır satır nasıl kaydırılır?


87

Basitçe söylemek gerekirse, vim'de ve diğer birçok editörde olduğu gibi emacs'de gezinmeye çalışıyorum; (Ben mesela olduğumda, alt / üst iki satır, ve G / yukarı bastırın Ctrl- p, n, , ) yalnızca bir satır yukarı veya aşağı değil Yarım ekran gider.


5
Bunun asla düzeltilmeyeceğine inanıyorum. Son 90'larda bir eksiklikti ve 2010'da hala burada kırılmıştı.
Steve Kuo

12
@Steve Kuo: Dayaktan çıkın - bu tasarlandığı gibi çalışıyor , ancak basit bir ayarla değiştirilebilir (veya "düzeltilebilir").
Teddy

17
@Teddy ve bu "basit ayar" nedir?
Steve Kuo

1
@Teddy evet, nedir bu?
Scooter

@Rook: Aslında z.Emacs hissini almak için in vim'i daha sık kullanmanızı tavsiye ederim ;-) Bu alışılmadık olabilir, ama aslında IMHO satır satır kaydırmaktan daha kullanışlıdır.
U. Windl

Yanıtlar:


52

EmacsWIki'deki bazı önerilere bakın:

(setq kaydırma-adım 1
      kaydırmalı muhafazakar olarak 10000)

3
Aslında gördüm - hem cevaplar, hem de yürüyüş yolları, ancak Wiki'de ikisi de tavsiye edilmiyor. Ne yazık ki, bunun nedenleri açık bir şekilde açıklanmadı. Bu yüzden, birinin kusursuz çalışan bir yöntem bulacağını umarak soruyu gönderdim.
Kale

1
Bunun neden tavsiye edilmediğini anlayamıyorum. Ben de benzer bir konfigürasyon kullanıyorum ve oldukça iyi çalışıyor. Sizi daha fazla temin etmek için, bu kaydırma adımı belgesine bakın (son cümleye dikkat edin): * Nokta dışarı çıktığında bir pencereyi kaydırmaya çalışılacak satır sayısı. Bu, noktayı kareye geri getiremezse, bunun yerine nokta ortalanır. Bu sıfırsa, nokta çerçeveden çıktıktan sonra her zaman ortalanır. Kaydırmanın her zaman bir seferde bir satır olmasını istiyorsanız, bunu 1'e ayarlamak yerine ``
korumalı

Evet, biraz daha etrafa bakınca wiki'deki bu uyarı notunu destekleyecek pek bir şey göremiyorum. Örneğin, kaydırma adımı, bir google araması aracılığıyla birden çok .emacs dosyasında oldukça yaygın görünüyor. Belki de wiki yazarı emacs'ın eski bir sürümünden bahsediyordur?
ars

Hiç sorun yaşamadım scroll-conservatively. Buna karşı uyarılar biraz tuhaf - eğer bir soruna neden olursa, satırı init.el'den kaldırmak yeterince kolaydır!
dbr

1
@ars groups.google.com/group/gnu.emacs.help/browse_thread/thread/… bu nedenle emacs <23.1 ve büyük dosyalarda bazen imleci ortaya atlayabilir, bu en büyük sorun gibi görünmüyor
dbr

51

Ekranı tam olarak konumlandırmak istiyorsanız, Ctrl-L tuşlarını kullanabilirsiniz.

  • Varsayılan olarak mevcut satırı ekranın ortasına konumlandırır.

  • ESC 0 Ctrl-L, geçerli satırı en üste konumlandırır.


14
Bunu yanlış anlamayın, ancak bunun satır satır kaydırmakla ne ilgisi var? (yani soru)
Kale

9
Eldeki araçla (yazarın görüşüne göre) daha doğal olan alternatif bir iş akışı sunmak mantıklıdır. Ancak buna bir sorumluluk reddi beyanı ile başlamalı ve mümkünse bu yaklaşımın neden "daha iyi" olduğunu açıklamalısınız.
dmckee --- eski moderatör yavru kedi

2
@dmckee - Uzun zamandır vim ... uhmm kullandım. Onunla çok iyi. Ancak, lisp ile bir şeyler yaptığım için, kendimi en azından tekrar emacs ile başa çıkmaya zorlamaya başladım ve bu "alternatif" hareket etme şekli şu anda benim için çok fazla. Öğreticiyi okuyun, bilin ... ama bu çok tuhaf, imho. Doğal değil.
Kale

1
@Idigas: Elbette. Bu adil ve starblue'nun tavsiyesine uymanıza gerek yok. Ancak bence bu tür bir cevap , açık ve ikna edici bir açıklama içeriyorsa yardımcı olabilir.
dmckee --- eski moderatör yavru kedi

1
Yaşasın, bu işi birkaç tuşa basarak yapıyor. ("Satır satır nasıl kaydırılır" ifadesini Google'da aradım çünkü bu, "kodu nasıl istediğim yere nasıl getirebilirim" için arama yapmak için kullanışlı bir yol gibi görünüyordu.) Teşekkürler!
Ennael

42

Partiye biraz geç kaldım, ancak bir paket yüklemenin sakıncası yoksa sorunsuz kaydırın ( github , MELPA'da da mevcuttur) ) aradığınız şey olabilir - kesinlikle benim için çalışıyor.

Kurduktan sonra init.el'inizde aşağıdakileri açabilirsiniz:

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

Son satır isteğe bağlıdır; o hareket etmeye başlar yakınında her zaman nokta etrafında belirli bir bağlam var bu yüzden, ekran kenarı yerine ona. Zevkinize göre ayarlayın.


7
Bunu okuduğumda ağlamaya başladım. Sorunun cevabının bu olduğundan oldukça eminim.
Eric Brown

3
Evet, Emacs'ı deneyen bir Vim kullanıcısı olarak tam da aradığım şey buydu.
juanjux

Hem bu çözümü hem de kaydırma adımı çözümünü kullandım, alttan 6. satıra gidip aşağıya bastığımda kombinasyon büyüleyici oluyor ve yukarıdan bir satır kaydırılacak.
Emad Elsaid

Ne yazık ki, örneğin oluş modunu veya arama özelliğini kullanarak dosyanızda zıpladığınızda artık düzgün kaydırma işlemi oldukça sık başarısız oluyor: her ikisi de noktayı ekranın dışına çıkarabilir ve sonucunuzun görüntülenmesini sağlamak için CL'ye basmanız gerekir.
Erik Knowles

27

Benim çözümüm Emac'ın varsayılan kaydırmasını değiştirmek değil, bir makrodan bir tuş dizisi komutu oluşturmaktır. Bu şekilde, istediğiniz zaman tek seferde bir satır kaydırmanın uygun bir yolunu elde edersiniz. İdeal değil, ama çok kolay. Sadece M- (↓) ve M- (↑) kullanılabilir, bu yüzden kullandım.

Ben böyle yaptım. Öncelikle, yukarı ve aşağı bir satır kaydırma için bir makro kaydetmeniz gerekir.

Makroyu başlat

C-x ( 

Bir aşağı kaydır

C-u 1 C-v

Makroyu durdur

C-x )

Birini yukarı kaydırmak için kullanın

C-u 1 M-v

Ardından makroyu adlandırmanız gerekir.

M-x name-last-kbd-macro

Aşağıdaki gibi istendiğinde ona bir isim verin:

down-one-line

Ardından, bir tuş dizisini bu komut adına bağlamak için aşağıdakileri kullanın:

M-x global-set-key

Ve sorulduğunda aşağıdaki gibi bir şey kullanın:

M-(down arrow)

Daha sonra hangi komutu bağlamak istediğinizi soracak ve ona daha önce icat ettiğiniz adı vermelisiniz, örneğin aşağıdan bir satır.

İşte bu bilgiyi nereden aldım. Makronuzu .emacs dosyasına eklemeyle ilgili talimatları aşağıda ve başka yerlerde de bulabilirsiniz.

Makro tanım açıklaması için burada

Kaydırmanın nasıl kontrol edileceği burada


23

Bunları .emacs2000'den beri dosyamda kullanıyorum.

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

Bu şekilde, ne yaptığıma bağlı olarak Emacs'ın varsayılan davranışını koruyabilir ve her seferinde bir satır kaydırabilirim.

Bu, en azından GNU Emacs 22'ye kadar çalıştı. Yakın zamanda Emacs 24'e yükselttim ve bunu keşfettim View-scroll-line-forwardve View-scroll-line-backwardartık mevcut değil. Biraz avlandıktan sonra, yukarı kaydırma ve aşağı kaydırma işlemlerinin işe yaradığını keşfettim. Yani Emacs 24 kullanıyorsanız, bunu kullanabilirsiniz.

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

Çoğunlukla Emacs 23'ü atladım, bu yüzden kullandığınız sürüm buysa, yukarıdakileri deneyebilirsiniz.

Not: scroll-up-lineaslında bir çizgi kayar aşağı çünkü tampon bir satır yukarı taşınıyor.


Teşekkürler, bu işe yarıyor ... ama burada sorduğum başka bir soruna
rastladım

13

Kaydırma işlemlerini gerçekleştirmek için ok tuşlarımı yeniden sıralıyorum.

(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
Bu tam olarak aradığım şey değil. Ekranın kaymasını istemiyorum (çünkü kaydırma kilidi etkinleştirilmiş gibi), ancak ekranın "hareket etmesini" ... oh, ... not defteri nasıl yapar :)
Kale

12

Basitler bunu yapar:

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

sonra meta imleç yukarı hareket eder ve meta imleç aşağı hareket eder.

QED. Yukarıdaki insanların ne içtiğinden emin değilim!


Veya az önce yayınladığım gibi, yukarı kaydırma ve aşağı kaydırma işlevlerini kullanabilirsiniz.
Rajesh J Advani

5

Hoş bir ctrl-up, ctrl-down kaydırma davranışı sağlamak için .emacs dosyamda aşağıdakiler var. Bunu fare tekerleği için de kullanıyorum.

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

Bunu daha yeni denedim ama aradığım davranış bu değil. Ekrandaki son satıra gitmenizi sağlar, ancak aşağı tıkladığınızda yine de "ekranı birkaç satır yukarı kaydırır" ... bunu nasıl daha iyi açıklayacağımı bilmiyorum.
Kale

Fare tekerleğini haritalama fikrini seviyorum. Ancak, kendi işlevlerinizi tanımlamak yerine, yerleşik Görünüm-kaydırma-satır-ileri ve Görünüm-kaydırma-satır-geri (veya daha yeni yukarı kaydırma ve aşağı kaydırma) çalışmaz mı?
Rajesh J Advani

2

"Vim" kaydırmasının bunu .emacs dosyanıza koymasını sağlamak için:

(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 benim için yapar
jjpikoov

2

Kullanmak can sıkıcı olabileceğinden M-up, M-downçünkü bu komutları aşırı yükleyen org moduna müdahale eder. Bu sorunu önlemek için kişisel olarak birleştiren komutları kullanıyorum M-page-up M-page-down"Burada yukarı ve aşağı kaydırmayı 1 satıra kadar tanımladım.

;;;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'e ayarlayın.

Yine de bunu yapmak istemiyorsun.


5
Aslında gördüm - hem yanıtlar, hem de arslar, ancak Wiki'de ikisi de tavsiye edilmiyor. Ne yazık ki, bunun nedenleri açık bir şekilde açıklanmadı. Bu yüzden, birinin kusursuz çalışan bir yöntem bulmasını umarak soruyu gönderdim.
Kale

3
bize öğleden sonra bunun neden iyi bir fikir olmadığını söylerseniz işinize yarayacaktır.
Daniel

Bunun neden iyi bir fikir olmadığını düşünmemin tek nedeni, kaydırmanın yavaş olması: Varsayılan yarım ekran yerine her zaman bir satır kaydırmanız gerekecek. (Sanırım?)
ShreevatsaR

1

Bir oluşturmak için hızlı bir yol arıyorsanız kaydırma gibi etkisi, girmek C-nve C-lsırayla aşağı imleci hareket ettiren ve sonra ortalar.


0

Eğer emacs'i .xsession'da başlatırsanız, benim durumumda konservatif olarak 100+ olarak kaydırmayı ayarlamak işe yaramaz, adım 1'i kaydırmaz. Ancak emacs'i X'ten sonra başlatırsanız, çalışır.


0

Fareyi kullanmaktan çekinmiyorsanız ve bir kaydırma tekerleğiniz varsa, değişken fare tekerleği kaydırma miktarını şunlardan birini kullanarak özelleştirebilirsiniz:

Ch v fare tekerleği kaydırma miktarı (özelleştir'e tıklayın, değeri "Belirli satır sayısı" 1 olarak değiştirin, Uygula ve Kaydet.)

veya .emacs satırına ekleyin: '(fare tekerleği kaydırma miktarı' (1 ((kaydırma). 1) ((meta)) ((kontrol). metin ölçeği)))

Https://www.emacswiki.org/emacs/Scrolling adresinde listelenen birçok olasılık vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.