我想编写一个vim命令来删除一行之前的空格。我尝试了两件不同的事情:
"delete the whitespace before a line
nnoremap gll <esc>^d0
"delete the whitespace for the lines in visual block
vnoremap gl <esc>:'<,'>normal ^d0<cr>
这是两个非常简单的命令,现在我想让gl
成为d
和c
等运算符,gll
删除一行的黑色。我希望gl
可以做这些事情:
2gll
命令将删除2行的空格。gl
来支持w
和e
之类的字词动作,因为我的'删除空白'命令会作用于行。我该怎么办?
答案 0 :(得分:1)
如果我理解你,你正在寻找命令:left
将gll
映射到:left<cr>
应该有效。
对于可视化映射,:left
也有效。
答案 1 :(得分:0)
只需写下:
nnoremap gll :normal ^d0<CR>
会让2gll
做你想做的事。
答案 2 :(得分:0)
快速而肮脏的映射:
nno gll :<C-U>exe ',+' . (v:count-1) . 'left'<CR>
说明:
<C-U> remove the range automatically added to the command line
exe execute a string as a normal command
',+' . (v:count-1)
build a string containing (1) a range of the current line
to the v:count-1 line (v:count holds the count given to
the mapping)
left and (2) the command to left-align text
<CR> execute the string
重读你的问题,也许你想要定义 运算符映射:
fun! Left(type)
'[,'] left
endfun
nno gl :set opfunc=Left<CR>g@
请参阅:help :map-operator
。
g@
是一个普通模式命令,它在调用'opfunc'
设置指定的函数之前等待运动。在函数中,'[
和']
标记指的是动作定义的起始行和结束行。
现在可以在运动命令之前使用gl
。
因此gll
将删除当前行的缩进,glap
将删除
当前段落的缩进等等。你需要做一些额外的工作
努力支持视觉模式,但在帮助文件中已经清楚地解释了这一点。
最后,我实现这一目标的方法就是简单地做到,例如<ap
,然后点击.
几次。 : - )