文章目录
一、为什么学习Vim(目的因)?
- 所有Unix LIke系统都会内置vim文本编辑器,其他的文本编辑器则不一定会存在;
- 很多个别软件的编辑接口都会主动调用vim;
- 程序简单,编辑速度相当快速;
二、Vim是什么(形式因)?
三、Vim由哪些因素组成(质料因)?
基本上vim共分为三种模式,分别为“一般指令模式”、“编辑模式”、“命令行命令模式”
-
一般指令模式:以vim打开一个文件就直接进入一般指令模式了,在一般模式中,你可以使用各种方式找到你要编辑的内容,也就是你可以使用“上下左右”按键来移动光标,也可以使用“删除字符”或“删除整行”来处理内容,也可以使用“复制”、“粘贴”来处理你的文件数据。
-
编辑模式:在一般指令模式中可以进行删除、复制、粘贴等动作,但是却无法真正编辑文本的内容,要想真正编辑文本内容,需要按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。
-
命令行命令模式:在一般指令模式中,输入“:/?”三个中任何一个都可以将光标移动到最下面那一行,在这个模式中,可以提供你“搜索数据”的动作,而读取、存盘、大量取代字符、离开vim、显示行号等等的动作则是在此模式中达成的。
四、如何使用Vim(方法论)?
(一)、一般指令模式:
1、光标跳转:
(1)、字符间跳转:
- h或向左方向键←:光标向左移动一个字符;
- l或向右方向键→:光标向右移动一个字符;
- j或向下方向键 ↓:光标向下移动一个字符;
- k或向上方向键↑:光标向上移动一个字符;
- #COMMAND:由#指定一次跳转的字符数;
例:3h(向左移动3个字符)
(2)、单词间跳转:
- w:word 下一个单词的词首;
- e:end 当前或下一个单词的词尾;
- b:before 当前或前一个单词的词首;
- #COMMAND:由#指定一次跳转的单词数;
例:3w(向后移动3个单词)
(3)、行首行尾跳转:
- ^:跳转至行首的第一个非空白字符;
- 0:零,跳转至行首;
- $:跳转至行尾;
(4)、行间跳转:
- #G:跳转至由#指定行;
- G:跳转至最后一行;
- 1G或gg:跳转至第一行;
(5)、句子间跳转:
- )
- (
(6)、段落间跳转:
- {
- }
2、字符编辑:
- x(小写):删除光标处往后的字符;
- X(大写):删除光标处往前的字符;
- #x(小写):删除光标处起始往后的#个字符;
- #X(大写):删除光标处起始往前的#个字符;
- xp:交换光标所在处的字符及其后面字符的位置;
3、删除命令(d,delete):
d:删除命令,可结合光标跳转命令,实现范围删除;
- d$:删除从光标到行尾;
- d^或者d0:删除从光标到行首;
- dw :删除光标到下一个单词的词首;(删到下一个单词的词首)
- de:删除光标到本单词或者下一个单词的词尾;(向后删半个或者一个单词)
- db:删除光标到本单词或者上一个单词的词首;(向前删半个或者一个单词)
- dd:删除光标所在的行;
- #dd:删除当前光标向下指定数字的行数;
4、复制命令(y,yank):
y:复制,工作行为类似于d命令;
- y$:复制从光标到行尾;
- y0:复制从光标到行首;
- y^:复制从光标到行首;
- yw:复制光标到下一个单词的词首;(复制到下一个单词的词首)
- ye:复制光标到本单词或者下一个单词的词尾;(向后复制半个或者一个单词)
- yb:复制光标到本单词或者上一个单词的词首;(向前复制半个或者一个单词)
- yy:复制当前行;
- #yy:复制多行,复制当前光标向下数字#行;
5、粘贴命令(p,put、paste):
- p(小写):如果缓冲区存的为整行,则粘贴当前光标所在行的下方,否则,则粘贴至当前光标所在处的后面;
- P(大写):如果缓存区存的为整行,则粘贴当前光标所在行的上方,否则,则粘贴至当前光标所在处的签名;
6、改变命令(c,change):
c:修改的同时可以从一般指令模式–>编辑模式
- c$:删除从光标到行尾并输入新内容;
- c0:删除从光标到行首并输入新内容;
- c^:删除从光标到行首并输入新内容;
- cw:删除光标到下一个单词的词首并输入新内容;(复制到下一个单词的词首)
- ce:删除光标到本单词或者下一个单词的词尾并输入新内容;(向后复制半个或者一个单词)
- cb:删除光标到本单词或者上一个单词的词首并输入新内容;(向前复制半个或者一个单词)
- cc:删除一行并输入新内容;
- #cc:删除#行并输入新内容;
7、翻屏操作:
- Ctrl+f:向文件尾部翻一屏;
- Ctrl+b:向文件首部翻一屏;
- Ctrl+d:向文件尾部翻半屏;
- Ctrl+u:向文件首部翻半屏;
8、其他操作:
(1)、区块选择( Visual Block):
当按下 v 或者 V 或者 [Ctrl]+v 时,这个时候光标移动过的地方就会开始反白, 这三个按键的意义分别是:
- v : 字符选择, 会将光标经过的地方反白选择!
- V : 列选择, 会将光标经过的行反白选择!
- [Ctrl]+v : 区块选择, 可以用长方形的方式选择数据。
- y : 将反白的地方复制起来。
- d : 将反白的地方删除掉。
- p : 将刚刚复制的区块, 在光标所在处贴上!
(2)、撤销此前的编辑:
- u(undo):撤销此前的操作;
- Ctrl+r:撤销之前的撤销(用于万一我们撤销错时);
- #u:撤销指定次数的操作;
(3)、重复前一个编辑操作;
- .(点号)
(4)、配对的查找:
- 把光标放在本节下面标记有任何一个 (、[ 或 { 处,按 % 字符光标的位置应当是在配对的括号处。再次按 % 就可以跳回配对的第一个括号处。
(二)、编辑模式:
模式转换:一般指令模式–>编辑模式
-
进入插入模式( Insert mode)-(常用):
-
i(小写):“从目前光标所在处插入”;
-
I(大写):“在目前所在行的第一个非空白字符处开始插入”;
-
进入插入模式( Insert mode)-( 常用):
-
a(小写):“从目前光标所在的下一个字符处开始插入”;
-
A (大写):“从光标所在行的最后一个字符处开始插入”;
-
进入插入模式( Insert mode)-( 常用):
-
o(小写):“在目前光标所在的下一行处插入新的一行”;
-
O(大写):“在目前光标所在处的上一行插入新的一行”;
-
进入取代模式( Replacemode)-( 常用):
-
r(小写): 只会取代光标所在的那一个字符一次;
-
R(大写):会一直取代光标所在的文字, 直到按下 ESC 为止;
(三)、命令行命令模式(内建的命令行接口):
1、地址定界
(1)、起始(start_position),结束(end_position)
- # ------ 具体第几行,(#使用数值表示,例如2表示第二行);
- #,# ------ 从左侧#表示行起始,到右侧#表示行结尾;
- #,+# ------ 从左侧#表示的行起始,加上右侧#表示的行数;
- . ------ 当前行;
- $ ------ 最后一行;例如从当前行到倒数第二行 .,$-1;
- % ------ 全文,相当于1,$;
- /pattern1/,/pattern2/ ------ 从第一次被pattern1模式匹配的行开始,一直到第一次被pattern2匹配到的行结束;
- #,/pattern/ ------ 从数字表示的行开始到第一次被模式pattern匹配的行;
- /pattern/,$ ------ 从第一次被part模式匹配的行开始,一直到最后一行;
2、命令行界面的储存、 离开等:
- w ------ 将编辑的数据写入硬盘文件中( 常用)
- :w! ------ 若文件属性为“只读”时, 强制写入该文件。 不过, 到底能不能写入, 还是跟文件权限有关;
- :q ------ 离开 vi ( 常用)
- :q! ------ 若曾修改过文件, 又不想储存, 使用 ! 为强制离开不储存。
- :wq ------ 储存后离开, 若为 :wq! 则为强制储存后离开 ( 常用)
- ZZ ------ 大写的 Z ,若文件没有更动, 则不储存离开, 若文件已经被更动过, 则储存后离开!
- :w [filename] ------ 将编辑的数据储存成另一个文件( 类似另存新文件)
- :r [filename] ------ 在编辑的数据中, 读入另一个文件的数据。 亦即将“filename” 这个文件内容加到光标所在行后面
- :n1,n2 w [filename] ------ 将 n1 到 n2 的内容储存成 filename 这个文件。
- :! command ------ 暂时离开 vi 到命令行界面下执行 command 的显示结果!
例如 “:! ls /home”即可在 vi 当中察看 /home 下面以ls 输出的文件信息!
3、查找:
- /pattern ------ 从当前光标所在处向文件尾部查找;
- ?pattern ------ 从当前光标所在处向文件首部查找;
n:与命令同方向;
N:与命令反方向;
4、查找并替换:
s:在末行模式下完成查找替换操作
-
s/要查找的内容/替换为的内容/修饰符:
查找替换的分隔符可以用/,也可以用其他字符替换例如:s@@@或者s###等; -
要查找的内容:可使用模式
-
替换为的内容:不可使用模式,但可以使用\1,\2,…等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容;
-
修饰符:
i:忽略大小写;
g:全局替换;默认情况下,每一行只替换第一次出现的信息;
5、多文件模式结合末行模式使用:
vim file1 file2 file3…
- :next 下一个
- :prev 前一个
- :first 第一个
- :last 最后一个
- :wall 保存所有(write-all)
- :qall 退出所有(quit-all)
6、单文件窗口分割模式:
场景1:当有一个文件非常的大, 查阅到后面的数据时, 想要“对照”前面的数据, 不想使用 [ctrl]+f 与 [ctrl]+b ( 或 pageup, pagedown 功能键) 来跑前跑后查阅怎么办?
场景2:当有两个需要对照着看的文件, 不想使用前一小节提到的多文件编辑功能怎么办?
- :sp[filename]------ 打开一个新窗口, 如果有加 filename, 表示在新窗口打开一个新文件, 否则表示两个窗口为同一个文件内容( 同步显示) 。
- [ctrl]+w+ j或[ctrl]+w+↓------按键的按法是: 先按下 [ctrl] 不放, 再按下 w 后放开所有的按键, 然后再按下 j ( 或向下方向键) , 则光标可移动到下方的窗口。
- [ctrl]+w+ k或[ctrl]+w+↑ ------同上, 不过光标移动到上面的窗口。
- [ctrl]+w+q------其实就是 :q 结束离开啦! 举例来说, 如果我想要结束下方的窗口, 那么利用 [ctrl]+w+↓ 移动到下方窗口后, 按下 :q 即可离开, 也可以按下[ctrl]+w+q 啊!
- Ctrl+w,s:split,水平分割;
- Ctrl+w,v:vertical,垂直分割;
7、多文件窗口分割模式:
vim -o | -O file1 file2 file3 …
- -o(小写):水平分割;
- -O(大写):垂直分割;
- Ctrl+w或者Ctrl+Arrow:在窗口间切换
(四)、定制vim的工作特性:
1、配置文件:永久有效
- 全局:/etc/vimrc
- 个人:~/.vimrc
2、命令行命令模式:当前vim进程有效
(1)、行号:
- 显示:set number,或者简写set nu;
- 取消显示:set nonumber,简写set nonu;
(2)、括号匹配:
- 匹配:set showmatch,简写set sm
- 取消:set nosm
(3)、自动缩进:
- 启用:set ai;
- 禁用:set noai;
(4)、高亮搜索:
- 启用:set hlsearch;
- 禁用:set nohlsearch;
(5)、语法高亮:
- 启用:syntax on;
- 禁用:syntax off;
(6)、忽略字符的大小写
- 启用:set ic;
- 不忽略:set noic;