【问题标题】:Writing whole alphabet in Vim在 Vim 中编写整个字母表
【发布时间】:2013-08-09 04:44:55
【问题描述】:

我有时需要编写整个字母表abcd…z,我讨厌在 Vim 的插入模式下一个字母一个字母地输入。有没有什么方法可以更有效地做到这一点?

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

【问题讨论】:

  • ...或者去低科技:inoreab abc abcdefghijklmnopqrstuvwxyz :)
  • 如果您确实需要经常输入整个字母表,那么缩写是您的最佳选择。调用它会容易得多,而不必记住一种编程方式。
  • 顺便说一句,如果您想从@glts 复制序列,然后将其设为垂直文本,请在该行上运行:s/\(.\)/\1\r/g...只需这样做...

标签: vim alphabet


【解决方案1】:

使用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

【讨论】:

  • 如果您没有在此处发布有关nrformats 的信息,那肯定是我最后一次知道的!您出于什么目的使用此选项以使您意识到这一点?
  • 是否可以以某种方式将增量用于书写数字,例如onetwothree 等?
【解决方案2】:

如果你的 shell 进行大括号扩展,这是一个非常优雅的解决方案:

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

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

【讨论】:

    【解决方案3】:

    这个命令怎么样:

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

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

    当您省略封闭的 join( ... ,'') 时,您会得到一个单独的行中的每个字符。

    【讨论】:

      【解决方案4】:

      首先,set nrformats+=alpha

      然后:

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

      这意味着:

      • ia 插入初始 a
      • Y25p 拉出 a 并将其复制到 25 行
      • &lt;CTRL-V&gt; 进入可视块模式
      • } 转到当前段落末尾的最后一个字符
      • g&lt;CTRL-A&gt; 递增每个字母字符(参见help v_g_CTRL-A
      • k上一行
      • 26gJ 加入 26 行,不插入或删除任何空格

      这会导致:

      abcdefghijklmnopqrstuvwxyz
      

      【讨论】:

        【解决方案5】:

        我在解决http://www.vimgolf.com/challenges/5ebe8a63d8085e000c2f5bd5时找到了一个更短的解决方案(你不需要事先更改nrformats)

        iabcdefghijklm<Esc>yiwg??P
        

        意思是:

        • iabcdefghijklm&lt;Esc&gt; 插入字母表的前半部分
        • yiw复制它
        • g??ROT13 编码(移位13个字母)得到后半部分
        • P粘贴前半部分

        【讨论】:

        • 效果很好。但是为什么 vim 有 'g??'喜欢功能?如果没有代码高尔夫,这是否需要任何其他原因?
        • 显然“在 Usenet 上,它曾经是编码剧透的常用方法”(stackoverflow.com/a/25224825/1705970)...另外不要忘记 vim 有类似“:smile”之类的东西...
        【解决方案6】:

        您可以尝试使用Vim abbreviations 或像UltiSnips 这样的成熟的sn-p 管理器插件。设置可能需要一些时间,并且您必须再次键入该字母以将其定义为缩写或 sn-p,但之后您将能够插入字母或任何其他常见块文本更容易。

        【讨论】:

        • 效果很好。但是为什么 vim 有 'g??'喜欢功能?如果没有代码高尔夫,这是否需要任何其他原因?
        猜你喜欢
        • 2011-03-08
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2018-07-08
        • 1970-01-01
        相关资源
        最近更新 更多