在Vim中写整个字母表

时间:2013-08-07 17:13:44

标签: vim alphabet

我有时需要写整个字母abcd…z,我讨厌在Vim的插入模式下逐个字母输入。是否有任何方法可以更有效地完成这项工作?

我知道ga命令给了我光标所在字符的ascii代码...但是不知道如何将它与我的标准解决方案混合来输入从1到的数字(对于例子)5000:a1ESCqqyyp^Aq4998@q ...

7 个答案:

答案 0 :(得分:19)

使用set nrformats+=alpha

ia<Esc>qqylp<C-a>q24@q

一步一步:

ia<Esc>      " Start with 'a'
qqylp<C-a>q  " @q will duplicate the last character and increment it
24@q         " Append c..z

答案 1 :(得分:12)

如果你的shell支持扩展,这是一个非常优雅的解决方案:

:r !printf '\%s' {a..z}

:read!将外部命令的输出读入当前缓冲区。在这种情况下,它会在shell扩展后读取应用于printf的shell {a..z}的输出。

答案 2 :(得分:6)

这个命令怎么样:

:put =join(map(range(char2nr('a'),char2nr('z')),'nr2char(v:val)'),'')

收集az范围内字符的ASCII值,然后将它们映射到nr2char()函数上,并将结果插入到当前缓冲区{{1} }。

当您遗漏封闭的:put = ... join(时,您会在每个单独的行中获得字符。

答案 3 :(得分:1)

首先,set nrformats+=alpha

然后:

ia<ESC>Y25p<CTRL-V>}g<CTRL-A>k26gJ

意思是:

  • ia插入首字母a
  • Y25p拖拉a并复制到25行上
  • <CTRL-V>进入视觉阻止模式
  • }转到当前段落末尾的最后一个字符
  • g<CTRL-A>逐渐增加每个字母字符(请参见help v_g_CTRL-A
  • k上一行
  • 26gJ连接26行,而无需插入或删除任何空格

哪个会导致:

abcdefghijklmnopqrstuvwxyz

答案 4 :(得分:1)

在解决http://www.vimgolf.com/challenges/5ebe8a63d8085e000c2f5bd5

时,我发现了一个较短的解决方案(您无需事先更改nrformats)。
iabcdefghijklm<Esc>yiwg??P

这意味着:

  • iabcdefghijklm<Esc>插入字母的前半部分
  • yiw复制
  • g?? ROT13编码(移位13个字母)以获得下半部分
  • P粘贴前半部分

答案 5 :(得分:0)

您可以尝试使用Vim abbreviations或完整的代码段管理器插件,例如UltiSnips。可能需要一些时间来设置,您必须再次键入该字母表以将其定义为缩写或片段,但之后您将能够插入字母表或任何其他常见的文本块更容易。

答案 6 :(得分:-1)

这可以做到::h<_<cr>2jyiwZZp