วิธีการเปลี่ยนขนาดของหน้าต่างแยกหน้าจอ emacs?


172

ฉันมี emacs แยกตามแนวนอน - ด้านบนฉันแก้ไขโค้ด Perl ด้านล่างคือเชลล์ ตามค่าเริ่มต้น emacs ทำให้ทั้งสองหน้าต่างมีขนาดเท่ากัน แต่ฉันต้องการให้บัฟเฟอร์ของเชลล์เล็กลง (อาจเป็นครึ่งหนึ่งของขนาด?) ฉันสงสัยว่าฉันจะทำอย่างนั้นได้อย่างไร

คำตอบ:


294

ด้วยเมาส์คุณสามารถลากขนาดหน้าต่างรอบ ๆ

คลิกที่ใดก็ได้บนบรรทัดโหมดที่ไม่ได้ใช้งานอยู่ '(ชื่อบัฟเฟอร์ปลอดภัยหรือพื้นที่ที่ไม่ได้ใช้งานไปทางด้านขวามือ) และคุณสามารถลากขึ้นหรือลง

การลากจากด้านหนึ่งไปอีกด้านจำเป็นต้องคลิกอย่างแม่นยำมากในจุดที่ทั้งสองโหมดเข้าร่วม

C-x -( shrink-window-if-larger-than-buffer) จะย่อขนาดหน้าต่างเพื่อให้พอดีกับเนื้อหา

C-x +( balance-windows) จะทำให้หน้าต่างมีความสูงและความกว้างเท่ากัน

C-x ^( enlarge-window) เพิ่มความสูงทีละ 1 บรรทัดหรือค่า arg นำหน้า arg เชิงลบลดขนาดหน้าต่าง เช่นC-- C-1 C-6 C-x ^หดตัวลง 16 C-u - 1 6 C-x ^แถวเช่นเดียวกับ

(ไม่มีการผูกมัดเริ่มต้นสำหรับshrink-window)

C-x }( enlarge-window-horizontally) ทำเช่นเดียวกันในแนวนอน
C-x {( shrink-window-horizontally) ถูกผูกไว้โดยค่าเริ่มต้น

การติดตามหนึ่งในคำสั่งเหล่านี้ด้วยrepeat( C-x zเพื่อเริ่มต้นและเพียงzเพื่อทำซ้ำอย่างต่อเนื่อง) ทำให้การเข้าถึงขนาดที่แน่นอนที่คุณต้องการนั้นค่อนข้างง่าย

หากคุณต้องการทำสิ่งนี้เป็นประจำด้วยค่าเฉพาะคุณสามารถบันทึกแมโครแป้นพิมพ์เพื่อทำมันหรือใช้สิ่งที่ต้องการ
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

หรือสิ่งนี้:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

ซึ่งเป็นแฮ็ค smidgen ดังนั้นสิ่งนี้จะดีกว่า:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

ฉันยังรักwinner-modeที่ช่วยให้คุณสามารถ 'ยกเลิก' การเปลี่ยนแปลงการกำหนดค่าหน้าต่างด้วยซ้ำ ๆC-c left(ไม่ว่าการเปลี่ยนแปลงจะเป็นขนาด / หมายเลข / การจัดเรียงของ windows หรือเพียงแค่บัฟเฟอร์ที่จะแสดง) C-c rightนำคุณกลับสู่การกำหนดค่าล่าสุด ตั้งทั่วโลกด้วย(winner-mode 1)


3
ยอดเยี่ยมสิ่งที่ฉันต้องการ! ขอบคุณมาก!
Steve

1
+1: ขอบคุณสำหรับเคล็ดลับโหมดผู้ชนะ 'เลิกทำ' btw ในกรณีของฉันการคลิกที่ชื่อบัฟเฟอร์จะเปิดบัฟเฟอร์ถัดไป แต่จะเห็นได้ง่ายเมื่อคุณสามารถปรับขนาดการดูรูปร่างเคอร์เซอร์ของเมาส์ได้
jfs

34

ฉันใส่สิ่งเหล่านี้ใน.emacs:

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

สองตัวแรกไม่ทำงานสำหรับฉันใน Emacs 24.3.1 บน Mac OSX 10.9.1
Oskar Persson

1
@OskarPersson อาจเป็นความขัดแย้งกับทางลัดส่วนกลาง ค้นหาในการตั้งค่าหรือควบคุมการแมปใหม่เพื่อล็อคแคป (ทางของฉัน) มันควรจะทำงานแล้ว
wilbeibi

ฉันมีปัญหาเดียวกันและพบว่า C-left และ C-right ขัดแย้งกับทางลัด Mission Control ใน OS X System Preferences ตามที่อธิบายโดย @Wilbeibi
Doug Richardson

1
คีย์เหล่านี้มีการกำหนดไว้แล้วก่อนอื่นให้ยกเลิกการตั้งค่าคีย์(global-set-key (kbd "<C-up>") nil)ก่อน แต่จะดีกว่าการใช้M-leftแทน
Mauricio Cortazar

@MauricioCortazar ฉันไม่ได้ใช้ Emacs มานานหลายปี คำตอบนี้อาจใช้ไม่ได้ตอนนี้ อย่าลังเลที่จะอัปเดต
wilbeibi

14

ลองใช้เอกสารช่วยเหลือ emacs

C-h a

จากนั้นพิมพ์ "ขยาย" หรือ "หน้าต่าง"

คุณจะพบสิ่งที่คุณต้องการ

สนุก!


เป็นไปได้ว่ามีใครกำลังทำงานในสภาพแวดล้อมที่C-hไม่สามารถใช้ได้ ถ้าเช่นนั้นจะเป็นอย่างไร
Derrell Durrett

1
หากคุณได้ clobbered แผนที่ช่วยเหลือมาตรฐานที่มีผลผูกพันแล้วคุณก็ควรจะตระหนักถึงสิ่งที่คุณได้ clobbered มันด้วย (หากไม่ลองให้ลองใช้ดู<f1>ซึ่งเป็นแผนที่ความช่วยเหลือมาตรฐานอื่นที่เชื่อมโยงกัน)
phils

6

C-x oไปที่หน้าต่างที่คุณต้องการขยายขนาด จากตรงนั้นC-x ^เพื่อขยาย


3
ในกรณีที่การผูกจะแตกต่างกัน (เหมือง) enlarge-windowคำสั่งคือ เคล็ดลับเพิ่มเติมคือการใช้คำนำหน้า arg เพื่อควบคุมปริมาณของการขยายตัว
โจเซฟเกย์

! น่ากลัว ขอบคุณมาก!
Steve

6

C-x ^รับอาร์กิวเมนต์ตัวเลขที่เป็นบวกและลบ C-u -4 C-x ^โดยเฉพาะอย่างยิ่งถ้าคุณต้องการที่จะหดตัวลงหน้าต่างที่เคอร์เซอร์ของคุณอยู่ในขณะนี้โดยสี่สายคุณสามารถกด


2

นี่ไม่ใช่คำตอบที่แน่นอนที่คุณกำลังมองหา แต่ฉันสะดุดกับคำถามนี้เมื่อมองหาฟังก์ชั่นในspacemacsดังนั้นฉันจะเขียนคำตอบของฉันเพียงเพื่อความสมบูรณ์

ตัวเลือกคือการใช้<SPC> + w + .( ใช้งานได้ในวานิลลาสเปซแม็ค)

สิ่งนี้จะเปิดหน้าต่างชั่วคราวที่สามารถใช้[]{}ปรับขนาดในระดับย่อย

ไม่จำเป็นต้องใช้ Cx หรือเมาส์ ...

สถานะการจัดการชั่วคราวของหน้าต่าง


หากมีอะไรที่คล้ายกันใน emacs ปกติ?
krokodil

มันอาจจะไม่อยู่ที่นั่นด้วยเหตุนี้ Drew จึงถามคำถามนี้ตั้งแต่แรก ...
Yesh

0

ฉันได้รับคำถามเดียวกัน นี่คือทางออกของฉัน
ครั้งแรกที่ฉันกำหนดฟังก์ชั่นใหม่:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

ตัวอย่างเช่นฉันต้องการ run-scheme ในบัฟเฟอร์ดังนั้นฉันจึงเขียนมันใหม่
และนี่คือคำจำกัดความที่มีฟังก์ชั่นที่กำหนดไว้ก่อนหน้า:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

ดังนั้นตอนนี้เมื่อฉันป้อน: Mx run-scheme-here บัฟเฟอร์ถูกปรับขนาด!
และนี่คือไฟล์ปรับแต่งของฉันหวังว่ามันจะช่วยได้ https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
ลิงก์ของคุณเสีย :(
Ciprian Tomoiagă
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.