2011-06-08 62 views
5

问题:我有两个缓冲区并行分离。我移动到左缓冲区中的一行,我想要做,它将右缓冲区中的点移动到相同的行号。例如,如果我在左边的缓冲区中的第26行,我运行某种宏,瞧,我在右边的缓冲区上的第26行。将一个缓冲区中的点移动到与另一个缓冲区中的点相同的行号

事情我已经尝试过,因为我很喜欢(或全部),这都没有奏效:

  • scroll-all-mode。它起作用,如果缓冲区同步开始(例如,点在两个缓冲区中的同一行号)并且如果我坚持基本的线移动。但是如果我isearch-forward-regexp或者页面向上/向下翻页,它会很快失去同步。如果有一个可以“重新同步”的命令,那么这就解决了我的问题。
  • 将当前行号保存在一个寄存器中,并使用该寄存器值goto-line。保存和恢复位置总是返回到相同的缓冲区。
+0

如果你实际上不需要点移动(和'hl-line-mode'可以弥补这一点),我注意到'2C'自动滚动功能可以使缓冲区保持在锁定步骤,​​远胜于'scroll-all-mode'。可悲的是,将两者结合起来并不具有预期的效果。见'M- :(info“(emacs)两列”)RET' – phils 2012-04-11 06:45:22

+0

@Ben你是说你想比较两个缓冲区/文件吗?如果是这样,使用'ediff-files'或'ediff-buffers'。 – CodyChan 2014-11-19 18:33:08

回答

6

这片的Emacs Lisp的应该做你想要什么:

(goto-line (line-number-at-pos) (window-buffer (next-window)) 

将其绑定到一个键序列,

(global-set-key (kbd "C-c l") 
    (lambda() 
    (interactive) 
    (goto-line (line-number-at-pos) (window-buffer (next-window))))) 
+0

您也可以创建一个次要模式,重新绑定您的'C-n'和'C-p'键,使您可以以锁步方式移动两个缓冲区。 – 2011-06-09 10:33:14

+0

你们摇滚...... – Ben 2011-06-09 23:16:10

相关问题