在Vim中设置tab
在 Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设置长度,非常灵活。
首先来看如何设定 tab 的宽度以及如何确定用 tab 制表符还是空格来表示一个缩进:
在自己的家目录下建立.vimrc文件(修改好后运行一下source ~/.vimrc使用配置文件生效)
然后输入
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab / expandtab
其中 tabstop 表示一个 tab 显示出来是多少个空格的长度,默认 8。
softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样。
当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
Vim全文的搜索
键入/后,光标进入VIM底部的命令行,这时就可以输入以/为开始的/搜索命令了。
1. 最简单的查找。输入/string就可以查找string字符串。
2. 继续查找。在第一次搜索后输入n将会继续进行上一次搜索,如果输入3n那么会找到后面第三个符合的字符串。大写的N会在反方向,也就是向上进行搜索。
3. 向上搜索。输入?可以向上搜索。随后的n命令将会继续向上搜索,N向下搜索,其他和/一样。
4. 对大小写的匹配。
4.1. 在命令行输入:set ignorecase可以设置搜索以忽略大小写的方式进行。输入:set noignorecase可以设置搜索以匹配大小写的方式进行。默认的,将匹配大小写。这个默认设置可以在.vimrc中修改。
4.2. 大小写智能匹配模式。输入命令:set ignorecase smartcase可以设置为智能大小写匹配模式。在这种模式下,如果你输入的字符串中至少包含一个大写字母,那么就会以大小写敏感模式进行搜索,否则以忽略大小写模式进行搜索。
4.3. 在搜索命令中指定大小写。在几种大小写搜索模式中进行转换总要输入长长的一串指令,如果需要不断地转换模式,确实有些麻烦。所以你可以直接在搜索命令中指定大小写匹配模式。\c表示忽略大小写,而\C表示对大小写敏感。
5. 查找当前词。一个简单的方法可以让你查找下一个和当前词一样的词,你不比输入/currentword,你可以直接按下*就可以查找下一个currentword。#可以让你向上查找同一个单词。
6. 调整查找后的光标位置。
6.1. 使用/string/3会使在光标转到找到string字符串的行下面的第3行。第1行从包含string的行算起。同样可以使用/string/-2来使光标停留在包含string的行的前面2行。
6.2. 使用/string/e可以使光标停留在string字符串的末尾而不是默认的第一个字符位置。/string/b则表示停留在string第一个字符的位置,不过默认就是如此,我们不比多此一举。但是/string/b+2却可以使光标停留在string字符串的第二个字符的位置,这里是r。在e或者b的后面+或者-数字,可以进一步调整光标的位置。
7. 特殊字符。在搜索命令中, .*[]^%/?~$这10个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
8. 匹配换行或空格。使用\n可以表示一个换行;而\s表示匹配空白,注意是空白不是空格。\_s表示匹配换行或者空格;\_a表示匹配换行或者一个字母。比如:/the\nword查找以the结束并且下一行以word开始的行的位置。/the\_sword查找the和word之间以空白或者换行分割的位置。/the\_s\+word表示the和word之间可以有多个空白。\+的含义可以在后面找到。
9. 限定词首或者词尾。\<可以限定找到是以指定字符串开始的单词。比如/\<the可以找到以the开始在字符串,但是会忽略在单词中间包含the的字符串。而\>则是限定必须是以指定字符串结尾的单词。
10. 行首和行尾。输入/^string查找以string开始的行,并且光标停留在这个string的第一个字符。输入/string$则查找以string结束的行,并将光标停留在这个string的第一个字符。这个模式不会忽略前导或者后置的空格。
11. 匹配任何一个字符。句号.可以匹配任何一个字符。例如/t.e可以找到the或者tae或者tue。
Vim搜索并替换
输入:[range]s/from/to/[flags]命令可以搜索匹配的字符串并且替换为指定的字符串。这是一个稍微复杂的命令。其中 [range]是一个可选项,用来指定搜索替换的范围。[flags]也是一个可选项,用来指定搜索替换的处理方式。所以这个命令的简单形式是:s/from/to/。
1. 搜索替换的范围。如果没有指定范围,则只在当前行进行搜索替换。
1.1. 在所有行进行搜索替换。范围符号%表示在所有行进行搜索替换。:%s/from/to/就是在全文查找from并替换为to。
1.2. 在指定的行上进行搜索替换。:1,50s/from/to/表示在第1行和第50行之间(包括1和50行)进行搜索和替换。:45s/from/to/表示仅仅在第45行进行搜索和替换。而”1,$”行号范围和“%“是等价的。
2. 处理方式。我现在使用的VIM默认的方式是无须确认。不过好像不同版本的默认的处理方式是不同的。
2.1. 无须确认。方式符号g表示直接替换无须进行确认。:%s/from/to/g表示在全文中查找from并且直接全部替换为to。
2.2. 列印。处理方式符号p表示在替换时列出每个被改变的行。手册中这么说,但是实际效果却让我很迷惑。
2.3. 确认后处理。处理方式符号c表示在进行替换前需要用户进行确认。这时你可以选择(y/n/a/q/1/^E/^Y):y表示同意当前替换;n表示不同意当前替换;a表示替换当前和后面的并且不再确认;q表示立即结束替换操作;1表示把当前的替换后结束替换操作;^E向上滚屏^Y向下滚屏,用来帮助查看前后内容以决定进行操作。
VIM编辑数个文件
:args 显示编辑名单中的各个文件名
:n 读入编辑名单中的下一个文件
:rew 读入编辑名单中的第一个文件
:e# 读入编辑名单内的前一个文件
:e file 读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有
存档,则应先以: w 存档。
:e! file 强迫读入另一个文件进入vi,原文件不作存档动作。
示例1,单个切换
vi file1 file2 file3
:n 切换到文件2 (n=next)
:e# 或 :N 切换回到刚才编辑的文件
比如当前编辑文件为a,:n跳至b,再:n跳至c,:e#回到b,想回到a的话用:e a
或者直接输入:e a, :e b, :e c,在三个文件间切换
示例2,分屏切换
打开一个,vi 文件名
然后在vi的命令输入状态下输入
:sp 另外一个文件的路径及文件名,如此就可以在一个窗口打开多个文件了。
或者用 vi -o file1 file2 file3....用分割屏幕窗口方式同时打开多个文件。
可以使用 ctrl 加两次按 w 或者ctrl + w 然后按上下键在上下窗口间切换。
VIM复制粘贴
1在多个文件间复制粘贴内容
vi多文件时,文件之间的拷贝复制只能通过命名缓存进行
如
"a3yy 把3行内容复制到命名为a的缓冲区
(此时,不是输入冒号,而是输入“a3yy)
"ap 把名字为a的缓冲区内容拷贝到当前位置
(此时,不是输入冒号,而是输入“ap)
在vi下使用
:new newfile,就可以打开多个文件进行编辑,使用ctl+w进行切换;
dd:删除一行
:vnew可以横着打开文件
2多方搜索整理如下:(除特殊说明以下操作均在命令模式下)
1.
将光标移动到将要复制的行处,按yy进行复制当前行(按nyy复制n行),再移动到粘贴位置,按p进行粘贴。
2.
将光标移到复制的首位置,按下v,用hjkl移动,按y复制,按p粘贴。
3.
光标移到起始行,输入ma;光标移到结束行,输入mb;光标移到粘贴行,输入mc;然后 :'a,'b co 'c,把 co 改成 m 就成剪切了。
4.
光标移动到要复制的行,输入yny(n表示要复制该行以下n行);光标移动到粘贴行,按p粘贴。
5.
直接输入:n1,n2 co n3。(n1为起始行,n2为结束行,n3为粘贴行)
6.
不同文件之间的复制:用:sp [filename]打开另一文件,(用^ww在文件之间切换),然后按上述方法复制
有关的命令如下:
yy 将当前行复制到缓冲区
yw 将当前单词复制到缓冲区
y1 将光标处的一个字符复制到缓冲区
p 将缓冲区的信息粘贴到光标的后面
:行号1 ,行号2 copy 行号3 将行号1到行号2的内容复制到行号3所在行的后面。
:行号1 ,行号2 move 行号3 将行号1到行号2的文本内容移动到行号3所在行的后面。
VI撤消与重复编辑操作
a) 撤消上一个编辑操作。 ====》 U
b) 重复上一个编辑操作。 =====> .
c) 还原被撤消的编辑操作。 ======> Ctrl+R
". "命令可以重复最近一次的编辑动作.