我有时需要写整个字母abcd…z
,我讨厌在Vim的插入模式下逐个字母输入。是否有任何方法可以更有效地完成这项工作?
我知道ga
命令给了我光标所在字符的ascii代码...但是不知道如何将它与我的标准解决方案混合来输入从1到的数字(对于例子)5000:a1ESCqqyyp^Aq4998@q
...
答案 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)'),'')
收集a
到z
范围内字符的ASCII值,然后将它们映射到nr2char()
函数上,并将结果插入到当前缓冲区{{1} }。
当您遗漏封闭的:put =
... join(
时,您会在每个单独的行中获得字符。
见
:h nr2char()
,:h char2nr()
,:h :put
,list-functions
表中查找,'')
,range()
,map()
和朋友。答案 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