[英]Writing whole alphabet in Vim
有時我需要寫出整個字母abcd…z
並且我討厭在 Vim 的插入模式下一個字母一個字母地輸入它。 是否有任何方法可以更有效地做到這一點?
我知道ga
命令,它為我提供了光標所在字符的 ascii 代碼……但不知道如何將它與我的標准解決方案混合以鍵入從 1 到(例如)5000 的數字: a1ESCqqyyp^Aq4998@q
...
使用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
如果您的 shell 進行大括號擴展,這是一個非常優雅的解決方案:
:r !printf '\%s' {a..z}
:read!
將外部命令的輸出讀入當前緩沖區。 在這種情況下,它讀取應用到{a..z}
的 shell printf
的輸出,然后它被 shell 展開。
這個命令怎么樣:
:put =join(map(range(char2nr('a'),char2nr('z')),'nr2char(v:val)'),'')
收集a
到z
范圍內字符的 ASCII 值,然后將它們映射到nr2char()
函數,並使用:put =
將結果插入到當前緩沖區中。
當您省略封閉的join(
... ,'')
您會在每個單獨的行上獲得字符。
看
:h nr2char()
,:h char2nr()
,:h :put
,list-functions
表中查找range()
、 map()
、 join()
和朋友。首先, 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
我在解決http://www.vimgolf.com/challenges/5ebe8a63d8085e000c2f5bd5 時找到了一個更短的解決方案(您不需要事先更改 nrformats)
iabcdefghijklm<Esc>yiwg??P
意思是:
iabcdefghijklm<Esc>
插入字母表的前半部分yiw
復制g??
ROT13 編碼(移位 13 個字母)得到后半部分P
貼上半場
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.