1
2
3
4
5
6
7
8
9
|
:vimgrep 搜索文本 搜索路径/**
:cn[ext] 跳到下一个匹配文本
:cp[revious] 跳到上一个匹配文本
:cnf[ile] 跳到下一个文件
:cpf[ile] 跳到上一个文件
:cr[ewind] 跳到开始位置
:cla[st] 跳到结束位置
:col[der] iterate through historical quickfix lists
:cnew[er] iterate through historical quickfix lists
|
替換(substitute)
:[range]s/pattern/string/[c,e,g,i]
range | 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。 |
pattern | 就是要被替換掉的字串,可以用 regexp 來表示。 |
string | 將 pattern 由 string 所取代。 |
c | confirm,每次替換前會詢問。 |
e | 不顯示 error。 |
g | globe,不詢問,整行替換。 |
i | ignore 不分大小寫。 |
g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。
删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
· 使用命令:cat filename1 | tr -d “^V^M” > newfile;
· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:
:%s/^M$//g # 去掉行尾的^M。
:%s/^M//g # 去掉所有的^M。
1
2
3
4
5
6
7
8
|
:s/part1/part2 # 用part2替换当前行中第1个part1
:s/part1 /part2/g # 用part2替换当前行中所有的part1
:%s/part1/part2 # 用part2替换所有行中每行第1个part1
:%s/part1/part2/g # 用part2替换所有行中所有的part1
:2,50s/part1 /part2 # 用part2替换第2行到第50行中每行第1个part1
:2,50s/part1/part2/g # 用part2替换第2行到第50行中所有的part1
:.,+3s/part1/part2 # 用part2替换当前行以及当前行后面的三行中每行第1个part1
:.,+3s/part1/part2/g # 用part2替换当前行以及当前行后面的三行中所有的part1
|
删除包含string的所有行
:g/string/d
1
2
3
4
5
6
7
8
9
10
11
|
yw 表示拷贝从当前光标到光标所在单词结尾的内容.
dw 表示删除/剪切从当前光标到光标所在单词结尾的内容.
y0 表示拷贝从当前光标到光标所在行首的内容.
d0 表示删除/剪切从当前光标到光标所在行首的内容.
y$ 表示拷贝从当前光标到光标所在行尾的内容.
d$ 表示删除/剪切从当前光标到光标所在行尾的内容.
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa 表示删除/剪切从当前光标到光标后面的第一个a字符之间的内容.
yy 表示拷贝光标所在行.
dd 表示删除/剪切光标所在行.
D 表示删除/剪切从当前光标到光标所在行尾的内容.
|
取消注释多行文本
1. 使用vim打开要操作的文件
2. Ctrl+V,进入VISUAL BLOCK模式
3. 使用上下的方向键移动光标,选择你需要取消注释的行
4. 输入 x,删除所有的 #,同时退出visual block模式
其他多行操作
其实,VISUAL BLOCK模式不止是可以进行注释或取消注释,它是一种通用的多行操作的方法。使用它还可以进行多行的文本替换等等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
w(e) 移动光标到下一个单词.
b 移动光标到上一个单词.
0 移动光标到本行最开头.
^ 移动光标到本行最开头的字符处.
$ 移动光标到本行结尾处.
H 移动光标到屏幕的首行.
M 移动光标到屏幕的中间一行.
L 移动光标到屏幕的尾行.
gg 移动光标到文档首行.
G 移动光标到文档尾行.
c-f (即ctrl 键与f 键一同按下) 本命令即page down.
c-b (即ctrl 键与b 键一同按下, 后同) 本命令即page up.
'' 此命令相当有用, 它移动光标到上一个标记处, 比如用gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置.
'. 此命令相当好使, 它移动光标到上一次的修改行.
|
下:j nj:向下移动n行
左:h nh:向左移动n列
右:l nl:向右移动n列
w:光标以单词向前移动 nw:光标向前移动n个单词光标到单词的第一个字母上
b:与w相反
e:光标以单词向前移动 ne:光标向前移动n个单词光标到单词的最后一个字母上
ge:与e相反
$:移动光标到行尾 n$:移动到第n行的行尾
0(Num):移动光标到行首
^:移动光标到行首第一个非空字符上去
f:移动光标到当前行的字符a上,nf移动光标到当前行的第n个a字符上
F:相反
%:移动到与制匹配的括号上去(),{},[],<>等。
nG:移动到第n行上 G:到最后一行
CTRL+G得到当前光标在文件中的位置
向前翻页:CTRL+F
向下移动半屏:CTRL+G
向后翻页:CTRL+B
到文件开头 gg
到文件结尾 shift+g
h或^h 向左移一个字符
j或^j或^n 向下移一行
k或^p 向上移一行
l或空格 向右移一个字符
w 移到下一个字的开头
W 移到下一个字的开头,忽略标点符号。默认的情况下W认为字符串时已空格分开的。
cp /mnt/marvell/main.sh /stv/
所以上面一行在W的选择下只有三个字符串,即 1 cp 2 /mnt/marvell/main.sh 3 /stv/
这与w时不一样的。
e 移到下一个字的结尾
E 移到下一个字的结尾,忽略标点符号
b 移到前一个字的开头
B 移到前一个字的开头,忽略标点符号同W
| 移到当前行的第一列
0 移到当前行的第一列字符处,会忽略行前的空白。
n| 移到当前行的第n列
^ 移到当前行的第一个非空字符
$ 移到当前行的最后一个字符
return或+ 移到下一行的第一个字符
- 移到前一行的第一个非空字符
L 移到屏幕的最后一行
M 移到屏幕的中间一行
H 移到屏幕的第一行
G 移到文件的最后一行
nG 移到文件的第n行
( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头 //我用的时候发现{只是移动到前一个空行 }移动到后一个空行首
} 移到下一个段落的开头
/**vim 第一列插入{来定义一个段落 */
[[ 回到段落的开头处
]] 向前移到下一个段落的开头处
m(a-z) 用一个字母来标记当前位置,如用mz表示标记z
'(a-z) 将光标移动到指定的标记,如用'z表示移动到z
'' 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查(此处时两个单引号不是双引号)
找到某个单词后, 再输入此命令则回到上次停留的位置.
'. 此命令相当好使, 它移动光标到上一次的修改行.
`. 此命令相当强大, 它移动光标到上一次的修改点.
% 从大括号的开始移动到大括号的结束位置
: 后边加行号就是跳到这一行
<C-O> 光标返回到以前的位置。相当于光标移动的“撤销”
<C-I> 光标返回到后来的位置。相当于光标移动的“恢复”
=== 屏幕定位 ==
c-e 将屏幕上滚一行
c-y 将屏幕下滚一行
c-u 将屏幕上滚半页
c-d 将屏幕下滚半页
c-b 将屏幕上滚一页
c-f 将屏幕下滚一页
z-return 将当前行置为屏幕的顶行
nz-return 将当前行下的第n行置为屏幕的顶行
z. 将当前行置为屏幕的中央
nz. 将当前行上的第n行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第n行置为屏幕的底行
:q! :不存盘退出
:e! :放弃修改文件内容,重新载入该文件编辑
:wq :存盘退出
dw:删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dnw:删除n个单词
dne:也可,只是删除到单词尾
dnl:向右删除n个字母
dnh:向左删除n个字母
dnj:向下删除n行
dnk:向上删除n行
d$:删除当前光标到改行的行尾的字母
dd:删除一行
cnw[word]:将n个word改变为word
cc:改变整行
C$:改变到行尾
J: 删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了.
u: 撤销前一次的操作
shif+u(U):撤销对该行的所有操作。
:set showmode :设置显示工作模式
o:在当前行的下面另起一行
O(shift+o):在当前行的上面另起一行
nk或nj:光标向上或向下移n行,n为数字
an!【ESC】:在行后面加n个感叹号(!)
nx:执行n次x(删除)操作
ZZ:保存当前文档并退出VIM
:help :查看帮助文档,在这之中,按CTRL+]进入超连接,按CTRL+O返回。
:help subject :看某一主题的帮助,ZZ退出帮助
:set number / set nonumber :显示/不显示行号
:set ruler /set noruler:显示/不显示标尺
/pattern 正方向搜索一个字符模式
?pattern 反方向搜索一个字符模式
然后按n 继续向下找
把光标放到某个单词上面,然后按×号键,表示查找这个单词
查找整个单词:/\
:set hlsearch 高亮显示查找到的单词
:set nohlsearch 关闭改功能
m[a-z]:在文中做标记,标记号可为a-z的26个字母,用`a可以移动到标记a处
r:替换当前字符
nr字符:替换当前n个字符
查找替换:
way1:
/【word】 :查找某个word
cw【newword】:替换为新word
n: 继续查找
.: 执行替换
way2:
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行用c表示需要确认
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2
:1,$ s/string1/string2/g:在全文中将string1替换为string2
v:进入visual模式
【ESC】退出
V:shift+v 进入行的visual模式
CTRL+V:进如块操作模式用o和O改变选择的边的大小。
粘贴:p,这是粘贴用x或d删除的文本
复制:
ynw:复制n个单词
yy:复制一行
ynl:复制n个字符
y$:复制当前光标至行尾处
nyy:拷贝n行
完了用p粘贴
:split:分割一个窗口
:split file.c :为另一个文件file.c分隔窗口
:nsplit file.c: 为另一个文件file.c分隔窗口,并指定其行数
CTRL+W在窗口中切换
:close:关闭当前窗口
在所有行插入相同的内容如include<,操作方法如下:
将光标移到开始插入的位置,按CTRL+V进入VISUAL模式,选择好模块后
按I(shift+i),后插入要插入的文本,按[ESC]完成。
:read file.c 将文件file.c的内容插入到当前光标所在的下面
:0read file.c 将文件file.c的内容插入到当前文件的开始处(第0行)
:nread file.c 将文件file.c的内容插入到当前文件的第n行后面
:read !cmd :将外部命令cmd的输出插如到当前光标所在的下面
:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去
CTRL+L刷新屏幕
shift + < 左移一行
shift + > 右移一行
u: undo
CTRL+R: re-do
J: 合并一行
CTRL+p 自动完成功能
CTRL+g 查看当前文件全路径
windows 下设置gVim字体和大小:
会不会别的什么设置文件把 guifont 又改回来了,尝试把 set guifont=Consolas:h11 放到 _vimrc 的最后