1

可能重复:
如何在 vim 中快速输入“==========”之类的行

编辑

原来这个问题与我如何在 vim 中快速输入类似“==========”这样的行完全相同- 但是那个标题没有这么好...


编辑markdown样式文件时,我喜欢

Some heading
------------

Notice the line matches the length of the heading?

目前我做:

yyp:s/./-/g

但我想知道是否有更好的(更少的击键)方法来做到这一点?

4

3 回答 3

3

正如我刚刚发现的那样,您可以少敲几下键:

yypVr-- 7,如果你包括 shift 键。

于 2013-01-25T19:31:57.080 回答
2

我不是 Vim 专家,但在任何文本编辑器中创建和使用宏都可以帮助我减少击键次数。

在正常模式下,将光标放在要下划线的行上,开始将宏录制到缓冲区(在本例中为 a)

q a <enter>

现在,执行上述命令。在这种情况下,我通过在一系列“-”字符之后插入一个新行来完成。在离开插入模式之前再次按 q 完成。

yyp:s/./-/gA<enter><esc>q

要为您可能拥有的任何标题添加下划线,请在正常模式下将光标放在该行上,然后键入:

@a<enter>


击键
之前:18
之后:3
节省:15!

AFAIK 缓冲区可以分配给 'a' 到 'z'

快乐 Vimming

于 2013-01-25T19:32:10.243 回答
1

我已将以下代码添加到我~/.vimrc的创建这样的标题中。我所做的只是ch=在一行上执行,它会在下面创建一个用='s 填充的行。您也可以轻松ch-地创建-'s 的标题行。

"""" CreateHeaderLine
" Easily create heading mapping
" The following line is an example
" ================================
" mnemonic ch: create header
nnoremap <silent> ch :call CreateHeaderLine('ch' ,'.')<cr>
nnoremap <silent> cH :call CreateHeaderLine('cH', '-')<cr>

function! CreateHeaderLine(mapping, address)
  let c = nr2char(getchar())
  exe 't ' . a:address
  exe "norm! v$r" . c
  silent! call repeat#set(a:mapping . c)
endfunction
于 2013-01-25T19:57:31.473 回答