【问题标题】:When opening 2 files in emacs, how can I have them appear side-by-side?在 emacs 中打开 2 个文件时,如何让它们并排显示?
【发布时间】:2011-07-14 17:35:14
【问题描述】:

有时我会从命令行启动带有 2 个文件的 emacs,如下所示:

emacs foo.txt bar.txt

这会打开emacs窗口,垂直分割:

foo.txt
-------
bar.txt

如何编辑我的 .emacs 文件,以便它们像这样并排显示?:

        |
foo.txt | bar.txt
        |

编辑:澄清一下,我知道如何在 emacs 启动后实现这一点(Mx 0,Mx 3,然后重新访问右侧的 bar.txt窗户)。我只是希望 emacs 在我启动时默认并排拆分,所以我不必这样做。

【问题讨论】:

标签: emacs dot-emacs


【解决方案1】:

这里有一个函数可以将一对垂直窗口变成一对水平窗口:

(defun 2-windows-vertical-to-horizontal ()
  (let ((buffers (mapcar 'window-buffer (window-list))))
    (when (= 2 (length buffers))
      (delete-other-windows)
      (set-window-buffer (split-window-horizontally) (cadr buffers)))))

要在启动时自动执行此操作,请将此函数添加到emacs-startup-hook

(add-hook 'emacs-startup-hook '2-windows-vertical-to-horizontal)

【讨论】:

  • 我最初选择@huitseeker 的一个答案是因为它的简单性,但它有一个缺点。例如,当 emacs 临时拆分窗口以显示可能的文件名选项卡补全时,它将并排拆分当前窗口。当当前窗口只有 80 个字符长时,这非常可怕。当您在 emacs 启动时打开多个文件时,肖恩的回答会并排拆分窗口,但除此之外,通过垂直拆分当前窗口,让 emacs 保留其打开临时缓冲区的通常行为。
  • "Transform vertical split to horizontal split." 这样的小评论可以避免对给定的lisp 检查器发出警告。
【解决方案2】:

以下内容(添加到您的 .emacs 中)使窗口拆分默认结果在并排缓冲区中(而不是一个在另一个之上):

(setq split-height-threshold nil) 
(setq split-width-threshold 0) 

当您运行诸如find-file-other-window (Ctrlx4f)。

(另一方面,要手动拆分窗口以获得两个并排的缓冲区,请考虑this 答案)。

【讨论】:

  • 六年前的答案,但它在 Emacs 25.1.1 上对我有用。
  • 这并不总是有效,取决于 split-window-sensably 的当前状态,内联文档说“.. 更喜欢垂直或水平拆分”
【解决方案3】:

这对我来说效果很好。使用命令行中的 -f function-name 让它根据需要设置您的 emacs 分屏工作区。这为我提供了一个 2 x 2 的财务文件网格,我每天都会更新这些文件,并将光标设置在最后的相应窗口上。我将它作为别名保存到 .bashrc 中,这样我就可以用一个命令 (doc_financial) 来提取它。

alias doc_financial='emacs -nw financial_accounts.txt -f split-window-horizontally financial_budget.txt -f split-window-vertically financial_taxes.txt -f other-window -f split-window-vertically financial_tasks.txt -f other-window -f other-window -f other-window'

【讨论】:

  • 这很好用,应该是公认的答案。谢谢!
  • 现在我只需要摆脱下半部分打开的暂存缓冲区窗口。
【解决方案4】:

使用M-x split-window-horizontallyCtrl-x 3

【讨论】:

  • 一旦 emacs 启动,我就知道如何手动操作;我只希望 emacs 在打开多个文件时默认使用并排拆分。编辑问题以澄清。
【解决方案5】:
;; 15-Oct-20  open first file in left window
(defun my-startup-layout ()
  (let ((buffers (mapcar 'window-buffer (window-list))))
    (when (= 2 (length buffers))
      (delete-other-windows)
      (set-window-buffer (split-window-horizontally) (cadr buffers))))
)

(add-hook 'emacs-startup-hook 'my-startup-layout)
(add-hook 'emacs-startup-hook 'next-multiframe-window)
;; end of customization to open first file on left
;;

【讨论】:

  • 需要细节或清晰
【解决方案6】:

使用水平分割窗口。

【讨论】:

    【解决方案7】:

    Ctrl -x 2 拆分窗口,上方和下方

    缓冲区 1(上图)
    缓冲区 2(下)

    Ctrl -x 3 拆分窗口,并排

    缓冲区 1(左)|缓冲区 2(右)

    C-M-v 滚动其他窗口

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多