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