有没有更好的方法在Vim中创建某个角色的行?

有没有更好的方法在Vim中创建某个角色的行?,vim,replace,Vim,Replace,可能重复: 编辑 原来这个问题是一个完全重复的-但其中一个没有这么好的标题 编辑标记样式文件时,我喜欢 Some heading ------------ Notice the line matches the length of the heading? 目前我有: yyp:s/./-/g 但我想知道是否有更好的方法(减少击键次数)来实现这一点?正如我刚刚发现的那样,您可以用更少的按键来实现这一点: yypVr--7,如果您包括shift键。正如我刚刚发现的,您可以用较少的按键笔划来

可能重复:

编辑 原来这个问题是一个完全重复的-但其中一个没有这么好的标题


编辑标记样式文件时,我喜欢

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

Notice the line matches the length of the heading?
目前我有:

yyp:s/./-/g

但我想知道是否有更好的方法(减少击键次数)来实现这一点?

正如我刚刚发现的那样,您可以用更少的按键来实现这一点:


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

正如我刚刚发现的,您可以用较少的按键笔划来完成:


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

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

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

qa
现在,执行上述命令。在本例中,我在一系列“-”字符后插入了一行新行。在离开插入模式之前,再次点击q完成

yyp:s/./-/gA<enter><esc>q
yyp:s/-/gAq
要在可能有的标题下加下划线,请在正常模式下,光标位于该行上,然后键入:

@a<enter>
@a

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

AFAIK缓冲区可以分配到“a”到“z”


Happy Vimming

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

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

qa
现在,执行上述命令。在本例中,我在一系列“-”字符后插入了一行新行。在离开插入模式之前,再次点击q完成

yyp:s/./-/gA<enter><esc>q
yyp:s/-/gAq
要在可能有的标题下加下划线,请在正常模式下,光标位于该行上,然后键入:

@a<enter>
@a

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

AFAIK缓冲区可以分配到“a”到“z”


Happy Vimming

我在我的
~/.vimrc
中添加了以下代码来创建这样的头文件。我所做的就是在一行上执行
ch=
,它将在下面创建一行,其中填充
=
。您可以轻松地执行
ch-
来创建
-
的标题行

"""" 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
“”“CreateHeaderLine
“轻松创建标题映射
“下面这行就是一个例子
" ================================
“助记符ch:创建标题”
nnoremap ch:调用CreateHeaderLine('ch','
nnoremap cH:调用CreateHeaderLine('cH','-'))
功能!CreateHeaderLine(映射、地址)
设c=nr2char(getchar())
exe't'。a:地址
exe“norm!v$r”。C
安静!调用repeat#set(a:mapping.c)
端功能

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

"""" 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
“”“CreateHeaderLine
“轻松创建标题映射
“下面这行就是一个例子
" ================================
“助记符ch:创建标题”
nnoremap ch:调用CreateHeaderLine('ch','
nnoremap cH:调用CreateHeaderLine('cH','-'))
功能!CreateHeaderLine(映射、地址)
设c=nr2char(getchar())
exe't'。a:地址
exe“norm!v$r”。C
安静!调用repeat#set(a:mapping.c)
端功能

与往常一样,在
vim
中,您可以映射命令。但是,也许您可以将此操作的含义传达给您的用例,以找到一个更通用的解决方案(我不明白您为什么要用
-
替换点)@user1146332我相信
是与行中任何单个字符匹配的正则表达式(并用
-
替换它)。
/g
在整行中都这样做(而不是第一次出现)。@Jeff Bridgman已经晚了,我在标记源代码中没有看到提示,谢谢你的评论。考虑到这一点,我将通过自动命令进行特定于标记的映射。
yypv$r-
可以工作,而且按键次数稍微少一些。我猜
yypVr-
的字符数较少,不过您必须按shift键才能到达。与往常一样,在
vim
中,您可以映射命令。但是,也许您可以将此操作的含义传达给您的用例,以找到一个更通用的解决方案(我不明白您为什么要用
-
替换点)@user1146332我相信
是与行中任何单个字符匹配的正则表达式(并用
-
替换它)。
/g
在整行中都这样做(而不是第一次出现)。@Jeff Bridgman已经晚了,我在标记源代码中没有看到提示,谢谢你的评论。考虑到这一点,我将通过自动命令进行特定于标记的映射。
yypv$r-
可以工作,而且按键次数稍微少一些。我想
yypVr-
是更少的字符,尽管你必须按shift键才能到达那里。是的,这就是我的映射。是的,这就是我的映射。