Emacs:以相同的缩进跳转到下一行

Emacs:以相同的缩进跳转到下一行

很多时候,我都无法找到循环、方法和类的结尾,最后只能筛选所有代码,这既耗时又令人沮丧。我宁愿跳过这些代码,直接跳到下一行,缩进相同。

emacs 中是否有任何快捷方式可以执行此操作?

答案1

稍有改进Stefan 的回答

(defun jump-to-same-indent (direction)
  (interactive "P")
  (let ((start-indent (current-indentation)))
    (while
      (and (not (bobp))
           (zerop (forward-line (or direction 1)))
           (or (= (current-indentation) 0)
           (> (current-indentation) start-indent)))))
  (back-to-indentation))

此函数采用前缀参数(例如 +1/-1),指定在搜索具有相同缩进的行时要移动的行数。它还会跳过空行。最后,可以使用类似于段落的键绑定来绑定向前和向后M-{搜索M-}

(global-set-key [?\C-{] #'(lambda () (interactive) (jump-to-same-indent -1)))
(global-set-key [?\C-}] 'jump-to-same-indent)

答案2

我不知道,但类似的东西

(defun jump-to-next-same-indent ()
  (interactive)
  (let ((start-indent (current-indentation)))
    (while
      (and (not (bobp))
           (zerop (forward-line 1))
           (> (current-indentation) start-indent))))
  (back-to-indentation))

应该可以工作,例如你可以将其绑定M-p

(global-set-key [?\M-p] #'jump-to-next-same-indent)

答案3

稍有改进PB 的回答 ;)

(defun jump-to-same-indent (direction)
  (interactive "P")
  (let ((start-indent (current-indentation)))
    (while
        (and (not (bobp))
             (zerop (forward-line (or direction 1)))
             (or (= (current-indentation)
                    (- (line-end-position) (line-beginning-position)))
                 (> (current-indentation) start-indent)))))
  (back-to-indentation))

这也将跳转到下一行而没有缩进,以前如果当前行没有缩进它会跳转到文件的底部。

答案4

您也可以使用正则表达式搜索。例如,我必须浏览 Yaml 文件中相同缩进级别的所有行 - 在我的情况下,这些行缩进到空格。我使用了:MCs ^ \w 然后继续按 Cs 导航到下一行或按 Cr 导航到上一行。

相关内容