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-horizontal-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-up
和delete-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 ,
如果你想要所有的删除行为,你可以检查贪婪删除。