杰森伍严 發表於 2023-8-30 00:00:00

vim学习高级技巧之序列的生成方法详解

<p>
        <span><strong>前言</strong></span></p>
<p>
        本文主要给大家介绍了关于在vim中插入数字序列的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。</p>
<p>
        <span><strong>待处理文本</strong></span></p>
<p>
        <strong>假设文本原来内容是</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_674447">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">这是第一行</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">这是第二行</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">这是第四行</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">这是第五行</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>插入行号变成</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_763136">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">1 这是第一行</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">2 这是第二行</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain plain">3</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">4 这是第四行</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">5 这是第五行</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>还有一种想要的效果是</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_429865">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">这是第一行 line</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">这是第二行 line</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">这是第三行 line</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain plain">这是第四行 line</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        下文会对上面两种需求都给出答案,利用下面提到的方法其实远可以实现更复杂的数字序列插入。包括替换指定字符,并在后面依次跟上序列数字。</p>
<p>
        <span><strong>使用line()</strong></span></p>
<p>
        <code>line('.')</code>可以返回当前行号</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_688463">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:g/^</code><code class="bash plain">/s//</code><code class="bash plain">\=line(</code><code class="bash string">'.'</code><code class="bash plain">).</code><code class="bash string">' '</code><code class="bash plain">/</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        非常简单,但不太灵活,只能用于显示当前行的行号</p>
<p>
        <span><strong>使用ex命令</strong></span></p>
<p>
        vim提供了一些可以打印行号的ex命令,如"=", "p # ", "#"</p>
<p>
        为了获取vim的命令输出,这里需要使用redir</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_589879">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">"为前5行加上行号</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">:redir @a | 1,5</code><code class="bash comments">#|redir END</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">:1,5d | put! a |1d |6d</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        在粘贴后在前后都多出一行,所以要用d来删除</p>
<p>
        <span><strong>使用range, setline, getline</strong></span></p>
<p>
        <code>range()</code>可以产生数字序列列表</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_998772">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash keyword">for</code> <code class="bash plain">i </code><code class="bash keyword">in</code> <code class="bash plain">range(6)</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">:call setline(i, i.</code><code class="bash string">' '</code><code class="bash plain">.getline(i))</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">:endfor</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <code>range(6)</code>会产生数字列表1-5, 不包含6</p>
<p>
        <span><strong>变量积加</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_244237">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">: </code><code class="bash functions">let</code> <code class="bash plain">i=1 | g/^</code><code class="bash plain">/s//</code><code class="bash plain">\=i.</code><code class="bash string">' '</code><code class="bash plain">/ | </code><code class="bash functions">let</code> <code class="bash plain">i=i+1</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        这种方法更灵活,可以通过控制i的值变化来控制插入的值</p>
<p>
        <span><strong>宏和Ctrl-A</strong></span></p>
<p>
        可以在数字上按ctrl-A来让数字加一, Ctrl-X让数字减一</p>
<p>
        过程如下:</p>
<ul>
<li>
                手工添加第一行的序号和空格</li>
        <li>
                输入0"ayw将序号和空格放到寄存器a中</li>
        <li>
                移到下一行,执行下面按键</li>
</ul>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_205676">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">qz0</code><code class="bash string">"aP0^A"</code><code class="bash plain">ayawjq</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        执行<code>4@z</code>来在下面4行执行保存在寄存器z中的命令序列</p>
<p>
        上面命令序列的详细解释如下</p>
<ul>
<li>
                qz: 开始录制宏,保存在寄存器z中</li>
        <li>
                0: 移到行首</li>
        <li>
                “aP: 把寄存器a中的内容(行号和空格)粘贴到这里</li>
        <li>
                0^A: 移到行首,按下ctrl-A来使当前光标下的数字加一</li>
        <li>
                "ayaw: 把当前光标下的word复制到寄存器a中</li>
        <li>
                j:移到下一行</li>
        <li>
                q: 录制结束</li>
</ul>
<p>
        如果没有空格做标志,那么就不能用aw来复制一个word,要用v来选择相应数字部分</p>
<p>
        <span><strong>注意:</strong></span>在命令行下, ctrl-a需要用ctrl-v, ctrl-a来表示这个按键</p>
<p>
        在vim下宏比较强大,但一般要写出一个可行的宏需要很多次调试</p>
<p>
        <span><strong>外部命令</strong></span></p>
<p>
        seq是linux下输出序列的命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_688137">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">harriszh Sat 22:14@ ~</code><code class="bash plain">/trunk/go</code><code class="bash plain">$ </code><code class="bash functions">seq</code> <code class="bash plain">5 -2 1</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">5</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">3</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">1</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">harriszh Sat 22:14@ ~</code><code class="bash plain">/trunk/go</code><code class="bash plain">$ </code><code class="bash functions">seq</code> <code class="bash plain">1 5</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">1</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">2</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">3</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">4</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="bash plain">5</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="bash plain">harriszh Sat 22:14@ ~</code><code class="bash plain">/trunk/go</code><code class="bash plain">$ </code><code class="bash functions">seq</code> <code class="bash plain">1 2 5</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="bash plain">1</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="bash plain">3</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="bash plain">5</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        三个参数的话,中间参数是step,两个参数的话就是开始数字和结束数字,step为1</p>
<p>
        通过<code>r !seq 1 5</code>来在文件中插入数字序列, 然后用列模式拷贝使用</p>
<p>
        <span><strong>使用printf</strong></span></p>
<p>
        <strong>直接插入行号</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_841382">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:%s/^/\=</code><code class="bash functions">printf</code><code class="bash plain">(</code><code class="bash string">'%-4d'</code><code class="bash plain">, line(</code><code class="bash string">'.'</code><code class="bash plain">))</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        其中-是左对齐,默认右对齐</p>
<p>
        <strong>在指定行插入序列</strong></p>
<p>
        首先中V来选择要插入序号的块</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_553847">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash string">'&lt;,'</code><code class="bash plain">&gt;s/^/\=</code><code class="bash functions">printf</code><code class="bash plain">(</code><code class="bash string">"%-4d. "</code><code class="bash plain">, line(</code><code class="bash string">"."</code><code class="bash plain">)-line(</code><code class="bash string">"'&lt;"</code><code class="bash plain">)+1)</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>只在非空行插入序列</strong></p>
<p>
        将下面func放入到.vimrc里</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_622555">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash keyword">function</code> <code class="bash plain">Inc(...)</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash functions">let</code> <code class="bash plain">result = g:i</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash spaces"> </code><code class="bash functions">let</code> <code class="bash plain">g:i += a:0 &gt; 0 ? a:1 : 1</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash spaces"> </code><code class="bash keyword">return</code> <code class="bash plain">result</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">endfunction</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <code>a:0</code>相当于<code>argc</code>, <code>a:1</code>相当于<code>argv</code></p>
<p>
        g:i是全局变量i</p>
<p>
        然后选中相应块</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_390716">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash functions">let</code> <code class="bash plain">i = 1</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">:</code><code class="bash string">'&lt;,'</code><code class="bash plain">&gt;g/^\S</code><code class="bash plain">/s/</code><code class="bash plain">^/\=</code><code class="bash functions">printf</code><code class="bash plain">(</code><code class="bash string">"%4d. "</code><code class="bash plain">, Inc())</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>range和print</strong></span></p>
<p>
        下面三条命令都是在指定行下面插入序列</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_226218">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:12put = range(1,5)</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">:call append(12, range(1,5))</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">:0put = range(3,7)</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        第一条命令和第二条等价</p>
<p>
        0put的话,就在第一行前</p>
<p>
        range和print相结合可以输出格式化的结果</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_873126">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:0put = map(range(1,5), </code><code class="bash string">'printf('</code><code class="bash string">'%04d'</code><code class="bash string">', v:val)'</code><code class="bash plain">)</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        v:val代表前面列表中取出的值</p>
<p>
        直接使用for更清晰易懂些</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_95957">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash keyword">for</code> <code class="bash plain">i </code><code class="bash keyword">in</code> <code class="bash plain">range(1,10) | put = </code><code class="bash string">'192.168.0.'</code><code class="bash plain">.i | endfor</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>特定字符后加序列号</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_851100">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash functions">let</code> <code class="bash plain">i=1|g</code><code class="bash plain">/abc/s//</code><code class="bash plain">\=</code><code class="bash string">'abc_'</code><code class="bash plain">.i/ | </code><code class="bash functions">let</code> <code class="bash plain">i= i+1</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        但上面命令有个问题,如果一行有多个abc, 那么都替换成一样的数字,而不会递增</p>
<p>
        要解决上面的问题可以使用寄存器</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_503175">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">:</code><code class="bash functions">let</code> <code class="bash plain">@a=1 | %s</code><code class="bash plain">/abc/</code><code class="bash plain">\=</code><code class="bash string">'abc_'</code><code class="bash plain">.(@a+setreg(</code><code class="bash string">'a'</code><code class="bash plain">,@a+1))</code><code class="bash plain">/g</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        setreg()回返回0,所以利用上面的方法来调用setreg来更新寄存器a的值</p>
<p>
        <span><strong>vim8的ctrl-a</strong></span></p>
<p>
        vim8对Ctrl-A提供了新功能</p>
<p>
        比如有</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_967249">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">my_array = 0;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        用ctrl-V列选中0-0, 然后按g Ctrl-A,</p>
<p>
        列选中前面的0-6, 然后也按g Ctrl-A</p>
<p>
        最终结果是</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_182326">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">my_array = 1;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="bash plain">my_array = 2;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">my_array = 3;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">my_array = 4;</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">my_array = 5;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">my_array = 6;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <code>g Ctrl-A</code>的原理是在第一数字上加1, 第二个数字上加2, 第三个数字上加3...</p>
<p>
        <span><strong>插件VisIncr</strong></span></p>
<p>
        主要命令有I, II, IYMD, IMDY, IA,ID, IO, IR, IX</p>
<p>
        支持数字,日期,字母|表,罗马数字,八进制,十六进制的递增递减</p>
<p>
        <strong>:IX</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IX</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                8</td>
                        <td>
                                8</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                9</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                a</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                b</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                c</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:I </strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :I</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                8</td>
                        <td>
                                8</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                9</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                10</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                11</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                12</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:I -1 </strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :I -1</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                8</td>
                        <td>
                                8</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                7</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                6</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                5</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                4</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:II</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :II</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                8</td>
                        <td>
                                8</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                9</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                10</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                11</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                12</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:II -1</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :II -1</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                8</td>
                        <td>
                                8</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                7</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                6</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                5</td>
                </tr>
<tr>
<td>
                                8</td>
                        <td>
                                4</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IMDY</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IMDY</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                06/10/03</td>
                        <td>
                                6/10/03</td>
                </tr>
<tr>
<td>
                                06/10/03</td>
                        <td>
                                6/11/03</td>
                </tr>
<tr>
<td>
                                06/10/03</td>
                        <td>
                                6/12/03</td>
                </tr>
<tr>
<td>
                                06/10/03</td>
                        <td>
                                6/13/03</td>
                </tr>
<tr>
<td>
                                06/10/03</td>
                        <td>
                                6/14/03</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IYMD </strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IYMD</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                03/06/10</td>
                        <td>
                                03/06/10</td>
                </tr>
<tr>
<td>
                                03/06/10</td>
                        <td>
                                03/06/11</td>
                </tr>
<tr>
<td>
                                03/06/10</td>
                        <td>
                                03/06/12</td>
                </tr>
<tr>
<td>
                                03/06/10</td>
                        <td>
                                03/06/13</td>
                </tr>
<tr>
<td>
                                03/06/10</td>
                        <td>
                                03/06/14</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IDMY</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IDMY</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                10/06/03</td>
                        <td>
                                10/06/03</td>
                </tr>
<tr>
<td>
                                10/06/03</td>
                        <td>
                                11/06/03</td>
                </tr>
<tr>
<td>
                                10/06/03</td>
                        <td>
                                12/06/03</td>
                </tr>
<tr>
<td>
                                10/06/03</td>
                        <td>
                                13/06/03</td>
                </tr>
<tr>
<td>
                                10/06/03</td>
                        <td>
                                14/06/03</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:ID</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :ID</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                Sun</td>
                        <td>
                                Sun</td>
                </tr>
<tr>
<td>
                                Sun</td>
                        <td>
                                Mon</td>
                </tr>
<tr>
<td>
                                Sun</td>
                        <td>
                                Tue</td>
                </tr>
<tr>
<td>
                                Sun</td>
                        <td>
                                Wed</td>
                </tr>
<tr>
<td>
                                Sun</td>
                        <td>
                                Thu</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:ID</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :ID</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                Sunday</td>
                        <td>
                                Sunday</td>
                </tr>
<tr>
<td>
                                Sunday</td>
                        <td>
                                Monday</td>
                </tr>
<tr>
<td>
                                Sunday</td>
                        <td>
                                Tuesday</td>
                </tr>
<tr>
<td>
                                Sunday</td>
                        <td>
                                Wednesday</td>
                </tr>
<tr>
<td>
                                Sunday</td>
                        <td>
                                Thursday</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IA </strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IA</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                a</td>
                        <td>
                                a</td>
                </tr>
<tr>
<td>
                                a</td>
                        <td>
                                b</td>
                </tr>
<tr>
<td>
                                a</td>
                        <td>
                                c</td>
                </tr>
<tr>
<td>
                                a</td>
                        <td>
                                d</td>
                </tr>
<tr>
<td>
                                a</td>
                        <td>
                                e</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IO</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IO</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                5</td>
                        <td>
                                5</td>
                </tr>
<tr>
<td>
                                5</td>
                        <td>
                                6</td>
                </tr>
<tr>
<td>
                                5</td>
                        <td>
                                7</td>
                </tr>
<tr>
<td>
                                5</td>
                        <td>
                                10</td>
                </tr>
<tr>
<td>
                                5</td>
                        <td>
                                11</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <strong>:IR</strong></p>
<p>
         </p>
<table>
<thead><tr>
<th>
                                Original</th>
                        <th>
                                Select, :IR</th>
                </tr></thead>
<tbody>
<tr>
<td>
                                II</td>
                        <td>
                                II</td>
                </tr>
<tr>
<td>
                                II</td>
                        <td>
                                III</td>
                </tr>
<tr>
<td>
                                II</td>
                        <td>
                                IV</td>
                </tr>
<tr>
<td>
                                II</td>
                        <td>
                                V</td>
                </tr>
<tr>
<td>
                                II</td>
                        <td>
                                VI</td>
                </tr>
</tbody>
</table>
<p>
         </p>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:https://segmentfault.com/a/1190000011104777</p>
頁: [1]
查看完整版本: vim学习高级技巧之序列的生成方法详解