Chinaunix首页 | 论坛 | 博客
  • 博客访问: 726338
  • 博文数量: 104
  • 博客积分: 4320
  • 博客等级: 上校
  • 技术积分: 1948
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-30 14:42
文章分类

全部博文(104)

文章存档

2012年(4)

2011年(65)

2010年(35)

分类: LINUX

2010-09-19 14:36:41

移动到指定行或指定文件位置

gg                                — 把光标移动到文件开头
numG/:num                  — 把光标移动到文件的某行
[0]G                             — 把光标移动到文件结尾
''(两个单引号)          -回到光标跳转前的位置
$                                  -当前行的末尾
0/^                                -当前行的开头
f/F + 字母                     -向前/后移动到第一个字母处
%                                 -移动到与之匹配的括号上去(),{},[],<>等,后面会看到,"%"很有用。
CTRL+G                     -得到当前光标在文件中的位置


查找文本

/word             — 在文件中查找word。
/\—在文件中精确查找word,另在光标所在词处shift+*也可以达到同样的效果。
/\ /word\>          —在文件中查找以word结尾的串。


复制文本段

yy               — 复制光标所在行
nyy             — 复制从光标所在行向下n行的内容
yw              — 复制光标所在的一个单词
y^               — 复制从行首到当前位置的内容
y$              — 复制到行尾为止的全部内容
yf/F + 字母        —向前/后复制到第一个“字母”处
y%             — 复制到匹配括号为止的全部内容
yG             — 复制由当前光标位置开始到文件结尾为止的全部内容([0]G代表结尾)
y num G- 复制当前行到指定行的内容
ygg            — 复制由当前光标位置开始到文件开头为止的全部内容。


删除文本段

x                  — 删除光标所在的一个字符
dd               — 删除光标当前行
ndd             — 删除从光标所在行向下n行的内容
dw               — 删除光标所在的一个单词
d^                — 删除从行首到当前位置的内容
d$               — 删除到行尾为止的全部内容
df/F + 字母        —从光标所在向 前/后 删除到第一个“字母”处
d%              — 删除到匹配括号为止的全部内容
dG               — 删除由当前光标位置开始到文件结尾为止的全部内容([0]G代表结尾)
d num G- 删除当前行到指定行的内容
dgg              — 删除由当前光标位置开始到文件开头为止的全部内容。


更改操作符,c,其工作方式几乎与 d(删除)操作符完全一样。唯一的区别在于,c 将您置于插入模式下。下面给出了一些使用更改操作符的示例:

cw — 更改当前单词
cc — 更改整行
c$ — 更改到行尾为止的全部内容。

列操作

在Normal模式下ctrl+v,就进入列操作模式,此时可以用方向键选取操作范围,可以对多个列进行处理,比如删除,复制等。I(大写i)进入 插入模式,插入完后返回Normal模式,就会产生多行效果。

文本替换

替换是vi 的强项, 因为可以用正规表达式来匹配字符串。以下提供几个例子,很多都很有用:

:s/aa/bb/g                            将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/\/bb/g                      将光标所在行出现的所有aa串替换为 bb, 仅替换aa这个单词,aab不替换
:%s/aa/bb/g                         将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g                   将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/                         将从12行到23行的行首加入 # 字符
:33,43s/^\t*\t//                      将从33行到43行的行首为“\t*\t”的字符(串)删除
:%s= *$==                           将所有行尾多余的空格删除
:g/^\s*$/d                             将所有不包含字符(空格也不包含)的空行删除.
:%s/^/Head content/g 全局插入开头信息
:%s/$/Tail content/g             全局插入尾部信息

分屏显示:

:e filename                          先关闭原有文件再打开新文件
:new filename 或                 ctrl+w再s或n 以水平分屏方式打开新文件
:vnew filename 或               ctrl+w再v 以垂直分屏方式打开新文件
ctrl+w再加方向键                切换到不同的子屏幕,也可用h,i,j,k代替4个方向键
ctrl+w再c或q                       关闭或退出文件(关闭屏幕)
ctrl+w再|                             最大化当前分屏
ctrl+w再=                            平分两个分屏
:resize n 或:resize +/-n                  改变窗口大小,或者增加减少行数n
:vertical resize n 或:vertical resize +/-n                  改变窗口大小,或者增加减少宽度n

录制宏和点(.)操作:

如果需要重复多次操作,则需要录制宏和重复点操作,“.”即是重复上一次命令,我们可以使用点操作来进行重复的命令,但如果重复很多次,就需要进行 宏录制。
录制宏                               -            在Normal模式下,q表示进入recording模式,之后还要再加一个字母,表示该字母对应的寄存器。然后可以执行想要的操作,操作完成后,q表示 完成recording。
播放宏 number@letter -           在Normal模式下,可 以重复letter存储的内容number次,比如1000@m表示重复寄存器m的内容1000次。

Diff

1. 进入 diff 模式
        vimdiff file1 file2 [file3 [file4]]
        vim -d file1 file2 [file3 [file4]]
两者效果一样。Vim 将为每个文件打开一个窗口,并且就象使用 -O 参数一样,使用垂直分割。如果你
要水平分割,加上 -o 参数:
        vimdiff -o file1 file2 [file3]
2. 当已在 Vim 中时,你可以用3种方式进入 diff 模式。
:diffsplit filename      对 filename 开一个新窗口。
:diffthis         使当前窗口成为 diff 窗口的一部分。也就是,设定和 "vimdiff" 同样的选项。
还有一个不常用。要垂直分割窗口,在前面加上 vertical。例如:
:vert diffs main.c

make相关

:make         编译程序,前提是目录下有Makefile文件。
:cwin/cw      打开错误窗口。
:ccl             关闭错误窗口。
:cl               列出所有错误(在有n多错误时比较方便)。
:cn              光标指向下一个错误。
:cp              光标指向上一个错误。

可以用“:h quickfix”、“:h make”、“:h makeprg”、“:h errorfile”查看其它的信息。

阅读(1468) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~