Skip to content

Commit 8e6f44e

Browse files
committed
csv
1 parent d2c385b commit 8e6f44e

2 files changed

Lines changed: 132 additions & 59 deletions

File tree

learn-vim-Appendix-Commands.html

Lines changed: 115 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,83 @@ <h3><a id="Movement-Commands">移动命令 Movement Commands</a></h3>
223223
<tr><td><code>T{x}</code></td><td>向后查找 Search backward to character after <em>x</em> in current line</td></tr>
224224
<tr><td><code>;</code></td><td>重复上次的行内查找 Repeat previous current line search</td></tr>
225225
<tr><td><code>,</code></td><td>反向重复上次的行内查找 Repeat previous current line search in opposite direction</td></tr>
226-
<tr><td></td><td></td></tr>
226+
227+
<tr><td colspan="2"><em>搜索偏移量 search-offset</em></td></tr>
228+
<tr><td><code>[num]</code></td><td>向下 [num] 行,位于首列 [num] lines downwards, in column 1</td></tr>
229+
<tr><td><code>+[num]</code></td><td>向下 [num] 行,位于首列 [num] lines downwards, in column 1</td></tr>
230+
<tr><td><code>-[num]</code></td><td>向上 [num] 行,位于首列 [num] lines upwards, in column 1</td></tr>
231+
<tr><td><code>e[+num]</code></td><td>匹配结尾 (end) 右方 [num] 个字符处 [num] characters to the right of the end of the match</td></tr>
232+
<tr><td><code>e[-num]</code></td><td>匹配结尾 (end) 左方 [num] 个字符处 [num] characters to the left of the end of the match</td></tr>
233+
<tr><td><code>s[+num]</code></td><td>匹配启始 (start) 右方 [num] 个字符处 [num] characters to the right of the start of the match</td></tr>
234+
<tr><td><code>s[-num]</code></td><td>匹配启始 (start) 左方 [num] 个字符处 [num] characters to the left of the start of the match</td></tr>
235+
<tr><td><code>b[+num]</code></td><td>匹配启始 (start) 右方 [num] 个字符处 [num] characters to the right of the start (begin) of the match</td></tr>
236+
<tr><td><code>b[-num]</code></td><td>匹配启始 (start) 左方 [num] 个字符处[num] characters to the left of the start (begin) of the match</td></tr>
237+
<tr><td><code>;{search command}</code></td><td>接着执行 {search‑command} 查找命令execute {search command} next</td></tr>
238+
239+
<tr><td colspan="2"><em>搜索偏移量示例 search-offset examples</em></td></tr>
240+
<tr><td><code>/test/+1</code></td><td>one line below "test", in column 1</td></tr>
241+
<tr><td><code>/test/e</code></td><td>on the last t of "test"</td></tr>
242+
<tr><td><code>/test/s+2</code></td><td>on the 's' of "test"</td></tr>
243+
244+
<tr><td colspan="2"><em>搜索模式 serach pattern</em></td></tr>
245+
<tr><td colspan="2">普通匹配原 ordinary atom</td></tr>
246+
<tr><td><code>.</code></td><td>匹配任何字符 any single character</td></tr>
247+
<tr><td><code>^</code></td><td>匹配行首 start of line</td></tr>
248+
<tr><td><code>$</code></td><td>匹配行尾 end of line</td></tr>
249+
<tr><td><code>\&lt;</code></td><td>单词的起始 start of word</td></tr>
250+
<tr><td><code>\&gt;</code></td><td>单词的结尾 end of word</td></tr>
251+
<tr><td><code>\(</code></td><td>group patterns into an atom</td></tr>
252+
<tr><td><code>\)</code></td><td></td></tr>
253+
<tr><td><code>\+</code></td><td>匹配前面的匹配原1 或更多 match 1..∞ of preceding atoms</td></tr>
254+
<tr><td><code>\=</code></td><td>匹配前面的匹配原0 或 1 match 0..1 preceding atoms</td></tr>
255+
<tr><td colspan="2">字符类匹配原 character classes</td></tr>
256+
<tr><td><code>\i</code></td><td>标识符字符 (见 'isident' 选项) identifier</td></tr>
257+
<tr><td><code>\I</code></td><td>同 "\i",但不包括数字字符 identifier</td></tr>
258+
<tr><td><code>\k</code></td><td>关键字字符 (见 'iskeyword' 选项) keyword</td></tr>
259+
<tr><td><code>\K</code></td><td>同 "\k",但不包括数字字符 keyword</td></tr>
260+
<tr><td><code>\f</code></td><td>file name</td></tr>
261+
<tr><td><code>\F</code></td><td>file name</td></tr>
262+
<tr><td><code>\p</code></td><td>printable character</td></tr>
263+
<tr><td><code>\P</code></td><td>printable character</td></tr>
264+
<tr><td><code>\s</code></td><td>white space</td></tr>
265+
<tr><td><code>\S</code></td><td> non-white space</td></tr>
266+
<tr><td><code>\d</code></td><td></td></tr>
267+
<tr><td><code>\D</code></td><td></td></tr>
268+
<tr><td><code>\x</code></td><td></td></tr>
269+
<tr><td><code>\X</code></td><td></td></tr>
270+
<tr><td><code>\o</code></td><td></td></tr>
271+
<tr><td><code>\O</code></td><td></td></tr>
272+
<tr><td><code>\w</code></td><td></td></tr>
273+
<tr><td><code>\W</code></td><td></td></tr>
274+
<tr><td><code>\h</code></td><td></td></tr>
275+
<tr><td><code>\H</code></td><td></td></tr>
276+
<tr><td><code>\a</code></td><td></td></tr>
277+
<tr><td><code>\A</code></td><td></td></tr>
278+
<tr><td><code>\l</code></td><td></td></tr>
279+
<tr><td><code>\L</code></td><td></td></tr>
280+
<tr><td><code>\u</code></td><td></td></tr>
281+
<tr><td><code>\U</code></td><td></td></tr>
282+
<tr><td><code></code></td><td></td></tr>
283+
<tr><td><code>\e</code></td><td>&lt;esc&gt;</td></tr>
284+
<tr><td><code>\t</code></td><td> &lt;tab&gt;</td></tr>
285+
<tr><td><code>\r</code></td><td>&lt;CR&gt;</td></tr>
286+
<tr><td><code>\b</code></td><td>&lt;BS&gt;</td></tr>
287+
<tr><td><code>\n</code></td><td></td></tr>
288+
<tr><td><code></code></td><td></td></tr>
289+
<tr><td><code></code></td><td></td></tr>
290+
<tr><td><code></code></td><td></td></tr>
291+
<tr><td><code>\c</code></td><td>忽略大小写 ignore case</td></tr>
292+
<tr><td><code>\C</code></td><td>匹配大小写 match case</td></tr>
293+
<tr><td><code></code></td><td></td></tr>
294+
<tr><td><code></code></td><td></td></tr>
295+
<tr><td><code></code></td><td></td></tr>
296+
<tr><td><code></code></td><td></td></tr>
297+
<tr><td><code></code></td><td></td></tr>
298+
<tr><td><code></code></td><td></td></tr>
299+
<tr><td><code></code></td><td></td></tr>
300+
<tr><td><code></code></td><td></td></tr>
301+
<tr><td><code></code></td><td></td></tr>
302+
<tr><td><code></code></td><td></td></tr>
227303

228304
<tr><td colspan="2"><em>标记间移动 Marking position</em></td></tr>
229305
<tr><td><code>m{x}</code></td><td>定义标记 Mark current position as <em>x</em></td></tr>
@@ -957,10 +1033,8 @@ <h2><em>Metacharacters Used in Replacement Strings</em></h2>
9571033
in hold buffers) are counted from the left on the line.</td>
9581034
</tr>
9591035
<tr>
960-
<td valign="top"><code>\&nbsp;</code></td>
961-
<td valign="top">Treats the following special characters
962-
as an ordinary character. To specify a real backslash,
963-
type two in a row (<code>\\</code>).</td>
1036+
<td><code>\</code></td>
1037+
<td>Treats the following special characters as an ordinary character. To specify a real backslash, type two in a row (<code>\\</code>).</td>
9641038
</tr>
9651039
<tr>
9661040
<td valign="top"><code>&amp;&nbsp;</code></td>
@@ -1131,6 +1205,9 @@ <h2 style="border-bottom:1px solid lightgray"><a id="ex-Commands">ex Commands</a
11311205
<p>ex命令采用以下格式:</p>
11321206
<p><code>:[address]command[options]</code></p>
11331207

1208+
<p>执行常规命令 Execute Normal mode commands:</p>
1209+
<p><code>:norm[al][!] {commands}</code></p>
1210+
11341211
<h3>寻址符号 Address Symbols / Range</h3>
11351212
<table border="0">
11361213
<tbody>
@@ -1211,7 +1288,7 @@ <h3>寻址符号 Address Symbols / Range</h3>
12111288
</tr>
12121289
</tbody></table>
12131290

1214-
<h2><em>Command Option Symbols</em></h2>
1291+
<h2><em>Special Ex characters</em></h2>
12151292

12161293
<table border="0">
12171294
<tbody><tr>
@@ -1242,12 +1319,42 @@ <h2><em>Command Option Symbols</em></h2>
12421319
<tr>
12431320
<td><code>%</code></td>
12441321
<td>&nbsp;</td>
1245-
<td>current filename</td>
1322+
<td>当前文件名 current filename</td>
12461323
</tr>
12471324
<tr>
12481325
<td><code>#</code></td>
12491326
<td>&nbsp;</td>
1250-
<td>alternate filename</td>
1327+
<td>轮换文件名 alternate filename</td>
1328+
</tr>
1329+
<tr>
1330+
<td><code>&lt;cword&gt;</code></td>
1331+
<td>&nbsp;</td>
1332+
<td>光标下的单词 word under the cursor (only where filename is expected)</td>
1333+
</tr>
1334+
<tr>
1335+
<td><code>&lt;cWORD&gt;</code></td>
1336+
<td>&nbsp;</td>
1337+
<td>光标下的字串 WORD under the cursor (only where filename is expected)</td>
1338+
</tr>
1339+
<tr>
1340+
<td><code>&lt;cfile&gt;</code></td>
1341+
<td>&nbsp;</td>
1342+
<td>光标下的文件名 file name under the cursor (only where filename is expected)</td>
1343+
</tr>
1344+
<tr>
1345+
<td><code>&lt;afile&gt;</code></td>
1346+
<td>&nbsp;</td>
1347+
<td>文件名,用于自动命令 file name for autocommand (only where filename is expected)</td>
1348+
</tr>
1349+
<tr>
1350+
<td><code>&lt;sfile&gt;</code></td>
1351+
<td>&nbsp;</td>
1352+
<td>":source" 的文件里该文件的文件名</td>
1353+
</tr>
1354+
<tr>
1355+
<td><code></code></td>
1356+
<td>&nbsp;</td>
1357+
<td></td>
12511358
</tr>
12521359
</tbody></table>
12531360

learn-vim-CSV.html

Lines changed: 17 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,12 @@
88
<title>VIM学习笔记 编辑CSV数据文件</title>
99
</head>
1010
<body>
11-
<p><a href="https://fileinfo.com/extension/csv" title=".CSV File Extension">CSV</a>是一种以逗号分隔值的文本文件,常用于电子表格程序,如 Microsoft Excel 或 OpenOffice Calc。CSV 文件中的每一行代表数据库中的一行,而每行数据库行由一个或多个以逗号分隔的字段组成。</p>
12-
13-
<h2 class="article"><a id=""></a></h2>
14-
<p></p>
15-
<a href="#" title=""></a>
16-
17-
<p></p>
18-
<p style="text-indent:2em"><code class="inset"></code></p>
19-
11+
<p><a href="https://fileinfo.com/extension/csv" title=".CSV File Extension">CSV</a>是一种以逗号分隔值的文本文件,常用于电子表格程序,如 Microsoft Excel 或 OpenOffice Calc。CSV 文件中的每一行代表数据库中的一行,而每行数据又由一个或多个以逗号分隔的字段组成。</p>
12+
<p>针对典型的CSV数据处理场景,以下将结合Vim内置命令、操作系统命令和<a style="font-weight: bold;" href="http://github.com/chrisbra/csv.vim" title="csv.vim">csv.vim</a>插件进行操作演示。</p>
13+
<p>您也可以使用<a href="https://kutt.it/vim-rb-csv" title="Rainbow-CSV">Rainbow CSV</a>等其他插件执行类似操作。</p>
2014

15+
<h2 class="article"><a id="install">安装配置</a></h2>
16+
<p>推荐使用<a href="https://yyq123.github.io/learn-vim/learn-vim-plugin-minpac.html" title="插件管理器(minpac)">minpac</a>等插件管理器,来安装GitHub上的<a href="http://github.com/chrisbra/csv.vim" title="csv.vim">csv.vim</a>插件。(请参阅官方<a href=https://github.com/chrisbra/csv.vim?tab=readme-ov-file#installation" title="installation">安装文档</a></p>
2117

2218
<h2 class="article"><a id="frozen-headers">固定标题行</a></h2>
2319
<p>通过以下步骤,将文件拆分在两个水平窗口中显示并绑定滚动,可以保持标题行始终置顶显示:</p>
@@ -31,6 +27,10 @@ <h2 class="article"><a id="frozen-headers">固定标题行</a></h2>
3127
</ol>
3228
<p>此时在文件中左右移动,标题行与内容将自动同步对齐:</p>
3329
<p><a href="http://yyq123.github.io/learn-vim/images/CSV-Frozen-Headers.png" title="CSV-Frozen-Headers.png"><img src="http://yyq123.github.io/learn-vim/images/CSV-Frozen-Headers.png" alt="CSV-Frozen-Headers.png" /></a></p>
30+
<p>使用<a href="https://github.com/chrisbra/csv.vim" title="csv.vim">csv.vim</a>插件,执行以下命令可以固定标题行:</p>
31+
<p style="text-indent:2em"><code class="inset">:Header</code></p>
32+
<p>执行以下命令可以取消固定标题行:</p>
33+
<p style="text-indent:2em"><code class="inset">:Header!</code></p>
3434

3535
<h2 class="article"><a id="column">按列对齐</a></h2>
3636
<p>假设有以下逗号分割的CSV文件,如下图红线所示,数据列没有对齐:</p>
@@ -45,6 +45,8 @@ <h2 class="article"><a id="column">按列对齐</a></h2>
4545
<h2 class="article"><a id="sort"></a>按列排序</h2>
4646
<p>调用外部<a href="https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html" title="sort">sort</a>命令,可以按照第2列进行排序:</p>
4747
<p style="text-indent:2em"><code class="inset">:%!sort -t ',' -k2</code></p>
48+
<p>使用<a href="https://github.com/chrisbra/csv.vim" title="csv.vim">csv.vim</a>插件,执行以下命令可以按照第2列进行排序:</p>
49+
<p style="text-indent:2em"><code class="inset">:Sort 2</code></p>
4850

4951
<h2 class="article"><a id="merge-columns"></a>按列合并</h2>
5052
<p>假设names.txt文件,包含姓名信息:</p>
@@ -53,8 +55,8 @@ <h2 class="article"><a id="merge-columns"></a>按列合并</h2>
5355
Tim</pre>
5456
<p>假设numbers.txt文件,包含电话信息:</p>
5557
<pre class="block">555-1234
56-
555-9876
57-
555-2468</pre>
58+
555-9876
59+
555-2468</pre>
5860
<p>使用以下Linux命令,可以将多个文件按列合并:</p>
5961
<p style="text-indent:2em"><code class="inset">$ paste names.txt numbers.txt</code></p>
6062
<p><a href="https://yyq123.github.io/learn-vim/images/CSV-Column-Merge-paste.png" title="CSV-Column-Merge-paste"><img src="https://yyq123.github.io/learn-vim/images/CSV-Column-Merge-paste.png" alt="CSV-Column-Merge-paste" /></a></p>
@@ -66,7 +68,7 @@ <h2 class="article"><a id="merge-files">按行合并</a></h2>
6668
<p style="text-indent:2em"><code class="inset">$ cat *.csv &gt; merged-file.csv</code></p>
6769

6870
<h2 class="article"><a id="split-files">拆分文件</a></h2>
69-
<p>调用外部<a href="https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html">split</a>命令,可以按行数拆分成多个文件</p>
71+
<p>调用外部<a href="https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html">split</a>命令,可以按照制定行数拆分成多个文件</p>
7072
<p style="text-indent:2em"><code class="inset">$ split -l200 passengers.csv --verbose</code></p>
7173
<pre class="block">creating file ‘xaa’
7274
creating file ‘xab’
@@ -86,49 +88,13 @@ <h2 class="article"><a id="del-empty-lines">删除空行</a></h2>
8688
<p>使用以下命令,可以删除所有空行:</p>
8789
<p style="text-indent:2em"><code class="inset">:%g/^ *$/d</code></p>
8890

89-
9091
<h2 class="article"><a id="info">数据统计</a></h2>
9192
<p>使用以下命令,可以查找并计数行内的逗号数量</p>
9293
<p style="text-indent:2em"><code class="inset">:s/,/,/gn</code></p>
94+
<p>使用<a href="https://github.com/chrisbra/csv.vim" title="csv.vim">csv.vim</a>插件,执行以下命令可以显示当前行的列数:</p>
95+
<p style="text-indent:2em"><code class="inset">:NrColumns!</code></p>
9396

94-
95-
96-
97-
<p style="color:gray; font-size:0.6em"><a href="http://yyq123.github.io/learn-vim/images/.png" title=""><img src="http://yyq123.github.io/learn-vim/images/.png" alt="" /></a></br>Source: medium.com/free-code-camp</p>
98-
99-
<pre class="block">
100-
</pre>
101-
102-
<ul>
103-
<li><p class="item"><br /></p></li>
104-
<li><p class="item"><a href="#" title=""></a><br /></p></li>
105-
</ul>
106-
107-
<span style="font-weight:bold; color:#4169E1; margin-left:0.2em">&#65311;</span>
108-
109-
<table summary="Commands" border="1" frame="border" rules="all" cellspacing="0" cellpadding="3">
110-
<caption style="margin:0.5em; font-weight:bold">选项列表</caption>
111-
<thead>
112-
<tr><th style="white-space: nowrap">选项</th><th>描述</th><th>帮助信息</th></tr>
113-
</thead>
114-
<tbody>
115-
<tr><td><code class="inset">!</code></td><td>如果包含,表示。例如,。</td><td style="white-space: nowrap"><code class="inset">:help viminfo-!</code></td></tr>
116-
</tbody>
117-
</table>
118-
119-
<table summary="Commands" border="2" frame="hsides" rules="all" cellspacing="0" cellpadding="3">
120-
<caption>命令小结</caption>
121-
<tbody>
122-
<tr><td><code class="inset">:</code></td><td rowspan="2"></td></tr>
123-
<tr><td><code class="inset">:</code></td></tr>
124-
<tr><td><code class="inset">:</code></td><td></td></tr>
125-
<tr><td><code class="inset">:</code></td><td></td></tr>
126-
<tr><td><code class="inset">:</code></td><td></td></tr>
127-
</tbody>
128-
</table>
129-
&ldquo;&rdquo;
130-
131-
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 250723&nbsp;|&nbsp;<a href="mailto:yyq123@gmail.com">YYQ</a></span><span>&lt;<a title="" href="http://yyq123.github.io/learn-vim/.html">上一篇</a>&nbsp;|<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-00-TOC.html">&nbsp;目录&nbsp;</a>|&nbsp;<a title="" href="http://yyq123.github.io/learn-vim/.html">下一篇</a>&gt;</span></p>
97+
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 250723&nbsp;|&nbsp;<a href="mailto:yyq123@gmail.com">YYQ</a></span><span>&lt;<a title="插件管理器(minpac)" href="https://kutt.it/vim-minpa">上一篇</a>&nbsp;|<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-00-TOC.html">&nbsp;目录&nbsp;</a>|&nbsp;<a title="Rainbow CSV数据编辑" href="https://kutt.it/vim-rb-csv">下一篇</a>&gt;</span></p>
13298

13399
</body>
134100
</html>

0 commit comments

Comments
 (0)