天天看点

【基础拾遗】编辑器之神-VIM

在这天地间,流传这两大神器的故事:据说Emacs是神的编辑器,而Vim是编辑器之神。正所谓,工欲善其事,必先利其器。今天就和大家分享一下关于编辑器之神Vim的传说。

【基础拾遗】编辑器之神-VIM

VI:Visual Interface

何为文本文件?文本文件一般指只有字符原生编码构成的二进制计算机文件,与富文本相比,其不包含字样样式的控制元素,能够被最简单的文本编辑器直接读取

文本文件常见的格式?ASCII、MIME、.txt、…

那么,何为文本编辑器?文本编辑器是计算机软件中的一种。主要用于用来编写和查看文本文件。

文本编辑器的种类:

行编辑器:sed

全屏编辑器:nano、vi、vim

VIM:模式化的编辑器

基本模式

编辑模式 (命令模式)

输入模式 (插入模式)

末行模式 (vim内置的命令行接口)

Note:打开的时候默认的模式是编辑模式

打开文件

<code># vim [OPTION]... FILE...</code>

<code>+#</code>:打开文件后,直接让光标处于第#行的行首

<code>+/PATTERN</code>:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

模式转换

模式转换:

<code>:q</code>:退出

<code>:!</code>:强制退出,丢弃做出的修改;

<code>:wq</code>:保存退出;

<code>:x</code>:保存退出;

<code>:w /PATH/TO/SOMEWHERE</code>:当前编辑的文本保存到别的文件;

<code>ZZ</code>:保存退出;

<code>ESC</code>

<code>:</code>

<code>i</code>:insert,在光标所在处前面插入;

<code>a</code>:append,在光标所在处的后面插入;

<code>o</code>:open,在当前光标所在行的下一行打开新行,并转换为输入模式;

<code>I</code>:在当前光标所在行的行首输入;

<code>A</code>:在当前光标所在行的行尾输入;

<code>O</code>:在光标所在行的上一行打开一个新行,并转换为输入模式;

编辑模式 - - &gt; 输入模式

输入模式 - - &gt; 编辑模式

编辑模式 - - &gt; 末行模式

末行模式 - - &gt; 编辑模式

关闭文件

图示说明如下: (转载请注明出处)

字符间跳转:

<code>h</code>:左

<code>l</code>:右

<code>k</code>:上

<code>j</code>:下

<code>h,j,k,l</code>

<code>#COMMAND</code>:跳转由#指定的个数的字符;

单词间跳转:

<code>w</code>:跳转至下一个单词或后一个单词的词首;

<code>e</code>:跳转至当前或下一个单词的词尾;

<code>b</code>:跳转至当前或下一个单词的词首;

<code>#COMMAND</code>:由#指定一次跳转的单词数;

行首行尾跳转:

<code>^</code>:跳转至行首的第一个非空白字符;

<code>0</code>:跳转至绝对的行首;

<code>$</code>:跳转至绝对行尾;

行间移动:

<code>#G</code>:跳转至由#指定行;

<code>G</code>:跳转至最后一行;

<code>1G</code>,<code>gg</code>:跳转至第一行;

句间移动:

<code>)</code>:跳转至下一个句子;

<code>(</code>:跳转至上一个句子;

段落间移动:

<code>}</code>:跳转至下一段

<code>{</code>:跳转至上一段

字符编辑:

<code>x</code>:删除光标处的单个字符;

<code>#x</code>:删除光标处起始的#个字符;

<code>xp</code>:交换光标所在处的字符及其后面字符的位置;

替换命令:

<code>r</code>,replace

<code>r</code>:替换光标所在处的字符;(单字符替换)

删除命令:

<code>#dd</code>:向下删除#行;

<code>d$</code>:删除至绝对行尾

<code>d^</code>:删除至行首的第一个非空白字符

<code>d0</code>:删除至绝对行首

<code>d</code>:删除命令,可结合光标跳转字符,实现范围删除;

<code>dd</code>:删除光标所在行;

粘贴命令:

(<code>p</code>,put,paste)

<code>p</code>:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面;

<code>P</code>:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面;

复制命令:

<code>y$</code>:复制至绝对行尾

<code>y0</code>:复制至绝对行首

<code>y^</code>:复制至行首的第一个非空白字符

<code>yy</code>:复制整行

<code>#yy</code>:复制多行;

<code>y</code>,yank

<code>y</code>:复制,工作行行为相似于d命令;

改变命令:编辑模式 - -&gt; 输入模式

<code>c</code>,change

<code>c</code>:修改

<code>cc</code>:删除并输入新内容

<code>#cc</code>:一次删除#行

<code>v</code>:按字符选定

<code>V</code>:按行选定

Note:经常结合编辑命令;

<code>u</code>(undo):撤销此前的操作;

<code>#u</code>:撤销指定次数的操作;

撤销此前的撤销:Ctrl+r

重复前一个编辑操作:<code>.</code>

<code>Ctrl+f</code>:向文件尾部翻一屏;

<code>Ctrl+b</code>:向文件首部翻一屏;

<code>Ctrl+d</code>:向文件尾部翻半屏;

<code>Ctrl+u</code>:向文件首部翻半屏;

vim自带的练习教程:

<code>vimtutor</code>

内建的命令行接口;

特性:

(1). 地址定界

后跟一个编辑命令:

<code>d</code>:删除指定范围的内容

<code>y</code>:复制指定范围的内容

<code>w /PATH/TO/SOMEWHERE</code>:将范围内的行另存至指定文件中;

<code>r /PATH/FROM/SOMEFILE</code>:在指定位置插入指定文件中的所有内容;

<code>:start_pos,end_pos</code>

<code>#:</code>具体的第#行,例如:2表示第2行;

<code>#,#</code>:从左侧#表示起始,到右侧#表示结束;

<code>#,+#</code>:从左侧#表示的行开始,加上右侧#表示的行数;

<code>.</code>当前行;

<code>$</code>:最后一行;

<code>%</code>:全文;相当于(1,$)

<code>/pat1/,/pat2/</code>:表示从第一次被pat1匹配到的行开始,一直到pat2匹配到的行结束

使用方式:

(2). 查找

<code>n</code>:与命令同方向;

<code>N</code>:与命令反方向;

<code>/PATTERN</code>:从当前光标所在处向文件尾部查找

<code>?PATTERN</code>:从当前光标所在处向文件首部查找

(3). 查找并替换

<code>s/要查找的内容/替换为的内容/修饰符</code>

查找替换中的分隔符<code>/</code>可替换为其它字符,例如:

<code>i</code>:忽略大小写

<code>g</code>:全局替换;默认情况下,没一行只替换第一次出现的内容;

要查找的内容:可使用模式;

替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;好可以使用<code>"&amp;"</code>引用前面查找时查找到的整个内容;

修饰符:

<code>s@@@</code>

<code>s###</code>

<code>s</code>:在末行模式下完成查找替换操作

vim FILE1 FILE2 FILE3 …

<code>:next</code> 切换至下一个文本

<code>:prev</code> 切换至前一个文本

<code>:first</code> 切换至前一个文本

<code>:last</code> 切换至最后一个文本

<code>:wall</code> 保存所有

<code>:qall</code> 退出所有

vim -o|-O FILE1 FILE2 …

<code>-o</code>:水平分割

【基础拾遗】编辑器之神-VIM

<code>-O</code>:垂直分割

【基础拾遗】编辑器之神-VIM

在窗口间切换:<code>Ctrl+w,Arrow</code>

<code>Ctrl+w,s</code>:split,水平分割

<code>Ctrl+w,v</code>:vertical,垂直分割

配置文件:(永久有效)

全局:<code>/etc/vimrc</code>

个人:<code>~/.vimrc</code>   (默认不存在,需要自己创建)

末行:(当前vim进程有效)

(1) 行号:

显示:<code>set number</code>,简写为:<code>set nu</code>

取消显示:<code>set nonumber</code>,简写为:<code>set nonu</code>

(2) 括号匹配:

匹配:<code>set showmatch</code>,简写为:<code>set sm</code>

取消匹配:<code>set nosm</code>

(3) 自动缩进:

开启:<code>set ai</code>

禁用:<code>set noai</code>

(4) 高亮搜索

开启:<code>set hlsearch</code>

禁用:<code>set nohlsearch</code>

(5) 语法高亮

开启:<code>syntax on</code>

禁用:<code>syntax off</code>

(6) 忽略字符大小写

启用:<code>set ic</code>

禁用:<code>set noic</code>

在末行模式下:<code>help SUBJECT</code>