Emacs命令删除最多非空白字符

我经常想做一个多行函数调用并将其减less到一行。 例如,转换…

function_call( 'first_arg', 'second') 

 function_call('first_arg', 'second') 

emacs是否有一些命令来帮助解决这个问题。 具体来说,是否有一个命令,将从点删除所有空白到第一个非空白字符?

你可以尝试delete-indentation ,我最喜欢的命令将多行连接成一行。 在你的例子中,把光标放在“秒”的行上,然后按M- ^两次。 这里是文档:

M- ^运行命令delete-indentation ,它是simple.el交互式编译的Lisp函数。

这是必然的M - ^

(delete-indentation &optional arg)

join这一行到以前,并在连接修复空白。 如果有填充前缀,则从该行的开头删除它。 用参数,将这一行join到下一行。

看看fixup-whitespace函数。 在simple.el带有Emacs。 它的文档是:

修正点周围物体之间的空白区域。 根据上下文,留下一个空格或一个空格。

一个类似的function, just-one-space

删除点周围的所有空格和制表符,留下一个空格

通常绑定到M-SPC

具体来说,是否有一个命令,将从点删除所有空白到第一个非空白字符?

有一个命令几乎可以做到这一点:

M- \在`simple.el'中运行命令delete-horizo​​ntal-space,这是一个交互式编译的Lisp函数。

这是绑定到M- \。

(删除水平空间和只可选后退)

删除点的所有空格和制表符。 如果仅向后是非零,则只在点之前删除它们。

Alt-space会将一串空格缩小为单个空格字符,但不会删除换行符。 不过,这应该有所帮助。

要删除从第一个非空白字符(或换行符)开始的所有内容,请input非空白字符,Alt空格,退格(删除最终的空白字符),然后退格(删除您添加的字符。

要将多行函数声明转换为单行声明,请使用Alt-space,backspace和Alt-E(goto-endofline)命令的组合。

我使用下面的macros将下一行“拉”到当前行的末尾,压缩空白。

 (defun pull-next-line() (interactive) (move-end-of-line 1) (kill-line) (just-one-space)) 

这与@ jrockway的move-line-updelete-indentation完全相反,我发现这更加自然。 macros中just-one-space命令正是@ Mike的M-SPACE

pull-next-line我的.emacs pull-next-line绑定到MJ (类似于Vim的J ,用于“join”,命令)。

 (global-set-key (kbd "MJ") 'pull-next-line) 

例。 在第一行调用pull-next-line

 function_call( 'first_arg', 'second') 

产量

 function_call( 'first_arg', 'second') 

调用它第二次产量

 function_call( 'first_arg', 'second') 

你总是可以用Mz删除一个字符。

例如在你的情况下:

Mz“删除单引号(不幸的是,这将删除单引号,但这是一个小小的不便)。

这样做的一个相当激烈的方式是饥饿 – 删除模式:

饥饿 – 删除是一种轻微的模式,导致删除删除删除的方向上的所有空白。

一个稍微不同的方法是创build一个键盘macros来为你做这个工作。 所以,为了创buildmacros观阶段,一般情况就是这样的:

 foo bar 

[一行“富”,然后几行,并与一些空格,写“酒吧”]

然后站在foo和bar之间的任何地方,执行以下操作:

 Cx(;开始录制macros
 Mb; 向后移动到foo的开始
结束 ; 移动到foo的结尾
 C空间; 放置标记
 CMf; 移动到吧台的尽头
 HOME; 移动到行首
 Cw; 拔出所有的空白空间
 M-SPACE; 只留下一个空间
 Cx); 结束录制macros
 Mx name-last-kbd-macro; 命名它,称之为jline或其他东西 

现在你可以使用Mx单行删除两个单词之间的所有空格

确保你记得在你的.emacs文件的某处发布Mx insert-kbd-macro来保存你的键盘macros – 这就是它的样子:

 (fset 'jline [?\Mb end ?\C- ?\C-\Mf home ?\Cw escape ? ]) 

我这样做:

 (defun move-line-up () "Removes leading spaces from the current line, and then moves the current line to the end of the previous line." (interactive) (let (start end) (save-excursion (beginning-of-line) ; get first non-space character, only look on this line (let ((search-end (save-excursion (end-of-line) (point)))) (re-search-forward "[^[:space:]]" search-end)) (setq end (1- (point))) (previous-line) (end-of-line) (setq start (point)) (delete-region start end)) (goto-char start))) (defun move-next-line-up () "Moves the next line to the end of the current line" (interactive) (next-line) (move-line-up)) 

并将这些绑定为:

 (global-set-key (kbd "Cx ,") 'move-line-up) (global-set-key (kbd "Cx .") 'move-next-line-up) 

所以要解决你的问题,在“second”这一行上,只要运行Cx , Cx ,

如果你想要所有的删除行为,你可以检查贪婪删除。