next-logical-line在emacs中做了什么

时间:2017-11-30 17:41:22

标签: emacs

我正在为emacs中的移动定义新的键绑定。我想将M-n绑定到下一行,但我也发现了next-logical-line,它似乎做了同样的事情。

我知道下一行会向下移动一行。 next-logical-line有什么作用?

你能给出一个例子,其中2个命令可以做不同的事情吗?

2 个答案:

答案 0 :(得分:1)

来自Emacs帮助(C-h a next-logical-line):

  

next-logical-line是一个交互式编译的Lisp函数   “simple.el”。

     

(next-logical-line& optional ARG TRY-VSCROLL)

     

将光标垂直向下移动到ARG线。这与之相同   'next-line',除了它总是按逻辑行而不是   视线,忽略变量'line-move-visual'的值。

逻辑行是基于newline字符分隔的行。或者换句话说,逻辑线基于文本而不是显示。

答案 1 :(得分:0)

https://github.com/emacs-mirror/emacs/blob/f069ea4f84a94bfbbd444073729f81fdd27c9445/lisp/simple.el#L5853是next-line()的来源。

docstring包含以下文本:

  

如果变量'line-move-visual'为非零,则此命令移动   显示行。否则,它会通过缓冲线移动而不需要   可变宽度字符或连续行。见M-x   始终按缓冲行移动的命令的next-logical-line。

https://github.com/emacs-mirror/emacs/blob/f069ea4f84a94bfbbd444073729f81fdd27c9445/lisp/simple.el#L6767是next-logical-line()

的来源

next-logical-line的实现是:

(defun next-logical-line (&optional arg try-vscroll)
  "Move cursor vertically down ARG lines.
  This is identical to `next-line', except that it always moves
  by logical lines instead of visual lines, ignoring the value of
  the variable `line-move-visual'."
    (interactive "^p\np")
      (let ((line-move-visual nil))
          (with-no-warnings
                (next-line arg try-vscroll))))

我们可以看到next-logical-line是使用next-line实现的,但line-move-visual设置为nil。默认情况下,此变量设置为t:

$ emacs -Q --batch --eval '(message "%s" line-move-visual)'
t