簡體   English   中英

在 Vim 中編寫整個字母表

[英]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)'),'')

收集az范圍內字符的 ASCII 值,然后將它們映射到nr2char()函數,並使用:put =將結果插入到當前緩沖區中。

當您省略封閉的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貼上半場

您可以嘗試使用Vim 縮寫或像UltiSnips這樣成熟的片段管理器插件。 設置可能需要一些時間,您必須再次輸入該字母表以將其定義為縮寫或片段,但之后您就可以插入該字母表或任何其他常見的文本塊容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM