转到代码行的开头:Emacs

时间:2011-05-17 19:11:32

标签: emacs

我使用emacs进行开发,并且经常需要移动到行的开头( C-a )。但是,如果该行是缩进的,我想移动到代码开始的位置。

所以在浏览代码时( ) for x in xy|z:。在输入 C-a 时,我们得到:|( ) for x in xyz:。但相反,我想这样:( ) |for x in xyz:

这里|表示cursor和()表示空格或制表符。

我该如何实现这一目标?

5 个答案:

答案 0 :(得分:78)

-

答案 1 :(得分:31)

我最喜欢的方法是在行的开头和代码的开头之间切换 C-a 。您可以使用此功能执行此操作:

(defun beginning-of-line-or-indentation ()
  "move to beginning of line, or indentation"
  (interactive)
  (if (bolp)
      (back-to-indentation)
    (beginning-of-line)))

并将适当的绑定添加到您喜欢的模式地图中:

(eval-after-load "cc-mode" 
     '(define-key c-mode-base-map (kbd "C-a") 'beginning-of-line-or-indentation))

答案 2 :(得分:18)

我做同样的切换技巧,如Trey,但是默认为缩进而不是开头。它需要稍多的代码,因为我知道没有“压痕开始”功能。

(defun smart-line-beginning ()
  "Move point to the beginning of text on the current line; if that is already
the current position of point, then move it to the beginning of the line."
  (interactive)
  (let ((pt (point)))
    (beginning-of-line-text)
    (when (eq pt (point))
      (beginning-of-line))))

这可能会让你继续使用 Ctrl - a 让它做你最想做的事情,同时仍然能够轻松获得内置行为

答案 3 :(得分:4)

默认情况下, Meta-m 运行back-to-indentation根据the documentation将“移动指向此行上的第一个非空格字符。”

答案 4 :(得分:1)

现代IDE中常见的习惯是在第二次印刷时移动到第一个/最后一个非空白区域:

(defun my--smart-beginning-of-line ()
  "Move point to `beginning-of-line'. If repeat command it cycle
position between `back-to-indentation' and `beginning-of-line'."
  (interactive "^")
  (if (and (eq last-command 'my--smart-beginning-of-line)
           (= (line-beginning-position) (point)))
      (back-to-indentation)
    (beginning-of-line)))

(defun my--smart-end-of-line ()
  "Move point to `end-of-line'. If repeat command it cycle
position between last non-whitespace and `end-of-line'."
  (interactive "^")
  (if (and (eq last-command 'my--smart-end-of-line)
           (= (line-end-position) (point)))
      (skip-syntax-backward " " (line-beginning-position))
    (end-of-line)))

(global-set-key [home]     'my--smart-beginning-of-line)
(global-set-key [end]      'my--smart-end-of-line)

此代码首先转移到实际开始/结束,新行为显示在后续按下。所以任何旧的键盘宏都可以按预期工作!