vim filename
插入模式
esc
退出保存
:w [filename]输入 「w filename」将文章以指定的文件名filename保存
:wq保存退出
:q!不保存退出
:x保存退出
zz退出保存
:e!不保存并载入该文件
命令模式
i进入插入模式,从光标前一个位置开始输入文件;
a进入插入模式,从光标后面一个位置开始输入文件;
o插入新的一行,从行首开始输入文字
移动光标
h/j/k/l「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
在 vi 中连接行
J 将下一行连接到当前行的末尾
nJ 连接后面 n 行
光标放置与屏幕调整
H 将光标移动到屏幕的顶行
nH 将光标移动到屏幕顶行下的第 n 行
M 将光标移动到屏幕的中间
L 将光标移动到屏幕的底行
nL 将光标移动到屏幕底行上的第 n 行
ctrl+y 将屏幕下滚一行
ctrl+u 将屏幕上滚半页
ctrl+d 将屏幕下滚半页
ctrl+b 将屏幕上滚一页
ctrl+f 将屏幕下滚一页
ctrl+l 重绘屏幕
z-return 将当前行置为屏幕的顶行
nz-return 将当前行下的第 n 行置为屏幕的顶行
z. 将当前行置为屏幕的中央
nz. 将当前行上的第 n 行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第 n 行置为屏幕的底行
0数字「0」:移到文章的开头
G「G」:移动到文章的最后。
$$」:移动到光标所在行的“行尾”
^「^」:移动到光标所在行的“行首”
w「w」:光标跳到下个字的开头
e「e」:光标跳到下个字的字尾
b「b」:光标回到上个字的开头
#l「#l」:光标移到该行的第#个位置,如:5l,56l
:#「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
:set num显示行号
:set nonum取消行号
删除文字
x每按一次,删除光标所在位置的“后面”一个字符
#x例如,「6x」表示删除光标所在位置的“后面”6个字符
X大写的X,每按一次,删除光标所在位置的“前面”一个字符
#X例如,「20X」表示删除光标所在位置的“前面”20个字符
dd删除光标所在行(实际上是剪切)
#dd从光标所在行开始删除#行(实际上是剪切)
dw删除单词(包括其后空格)(需要将光标定位于单词开头)(实际上是剪切)
dw 剪切单词(不包括其后空格).
复制
yw将光标所在之处字符
#yw复制#个字到缓冲区
yy复制光标所在行到缓冲区。
y$复制光标所在位置到行尾
y^复制光标所在位置到行首
#yy「6yy」表示拷贝从光标所在的该行“往下数”6行文字
p将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
yw 复制一个单词(包括空格)
ye 复制一个单词(不包括空格)
Y 复制一整行(包括行尾换行符),不同于D删除到行尾(不包括换行符)
在插入模式下直接粘贴,剪贴板上的每个字符都相当于手动输入,再加上vim的自动缩进,所以缩进就会累积,如果vim还支持自动连续注释,每行代码都自动加上了注释,解决办法: 在粘贴前先设置进入粘贴插入模式,即不会自动缩进和连续注释,运行命令:set paste
然后执行粘贴操作.但是在粘贴插入模式下代码是不会自动按格式缩进的,需要使用nopaste设置回来:set nopaste.
也可以在.vimrc中设置切换的快捷键,比如设置F9,则可以在.vimrc中加入:set pastetoggle=
这样直接在插入模式按F9就会在”-- 插入 --”模式和”-- 插入(粘贴) --”模式中切换
命令行模式下输入”6,9 co 12”,复制6,9行到12行
命令行模式下输入”6,9 m 12”,剪切6,9行到12行.
在6行做标记ma,移动光标到当前行,输入y'a会复制当前行到标记a之间的文本.输入d'a会删除a行到当前行.
单行删除:1(待删除行)d
多行删除:1,10d
光标移到起始行,输入ma; 光标移到结束行,输入mb; 光标移到粘贴行,输入mc; 输入:'a,'b co 'c 把 co 改成 m 就成剪切了.
删除多行的:5, 9 de
:[range]s/pattern/string/[c,e,g,i]
range指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章, 也可以 % 代表 % 是目前編輯的文章,# 是前一次編輯的文章.
pattern就是要被替換掉的字串,可以用 regexp 來表示.
string將 pattern 由 string 所取代.
c confirm,每次替換前會詢問.
e 不顯示 error.
g globe,不詢問,整行替換,如果没有这一项,只会替换每行的第一个
. 点号表示在当前行查找(这是默认的range).
iignore 不分大小寫.
:nohl可以取消高亮
[實例] :%s/Edwin/Edward/g
這樣整篇文章的 Edwin 就會替換成 Edward.
注意: [c,e,g,i] 这几个可以合起来用,如cgi 表示不分大小寫,整行替換,替換前要詢問是否替換
替换命令
r「r」:替换光标所在处的字符,替换完之后还是命令模式
R「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
替换的应用之多行注释:
:20,30 s/^/\/\//g第20到30行用//注释掉,如果加是gc,则替换每个时都要提示
:.,30 s/^/#/g当前行(.表示当前行)到30行注释掉,如果没有g,则替换第一个
:20,30 s/^\/\///g取消注释,如果最后不是没有g,只有c,提示且只会替换第一个
:4,10 s/^[^s]\+// 去掉行首的空白字符
replace with to (y/n/a/q/l/^E/^Y) ,输入y表示替换当前这个,n表示这个不要替换,a表示全部替换,q表示退出,不替换了,l表示把当前这个替换后就退出,^E(ctrl+e,好像大小写都可以)表示向下滚动一行,^Y表示向上滚动一行.
在s前面加上范围,比如:1,5s/from/to表示替换1到5行的from,在vim中有些字符可以很方便的表示一些特殊行,比如.表示当前行,$表示最后一行,第一行当然就是1了.所以我们可以用:.s/from/to命令替换当前行的from,用:.,$s/from/to替换从当前行到结束行的每行的第一个匹配的from.from 和to可以使用正则表达式.如:3,10s/^/Add to line Head/gc 将第3到10行前面插入字符"Add to line Head" 并询问%s/22$/BB/g 替换所有在行尾处出现的22为BB.
回复上一次操作
u如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
U撤销对当前行的所有操作
ctrl+r重做
修改
cw「cw」:更改光标所在处的字到字尾处
c#w例如,「c3w」表示更改3个字
查找字符
/「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止
?先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
set hlsearch "打开高亮搜索
set nohlsearch "关闭高亮搜索
nohl "只取消掉当前的搜索高亮
map :nohl只需要按Ctrl-n取消查找后的高亮显示
定义标记
% 跳转到相配对的括号
gD 跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
> 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x
{ 跳到上一段的开头
} 跳到下一段的的开头
( 移到这个句子的开头
) 移到下一个句子的开头
[[ 跳转至上一个函数(要求代码块中'{'必须单独占一行)
]] 跳转至下一个函数(要求代码块中'{'必须单独占一行)
C-] 跳转至函数或变量定义处
C-O 返回跳转前位置
C-T 同上
nC-T 返回跳转 n 次
0 数字0,跳转至行首
(单引号)'a访问光标所在行的行首
:marks可以看到所有的标记
gg:跳到文档开头
G:跳到文档末尾
0:跳到行的开头
CTRL+O跳到一个老地方(或双击 " 键)
CTRL+L跳到一个新地方
vim中执行shell命令,有以下几种形式
1):!command
不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容
2):r !command
将shell命令command的结果插入到当前行的下一行
例如
:r !date,读取系统时间并插入到当前行的下一行.
3):起始行号,结束行号!command
将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容.
4):起始行号,结束行号w !command
将起始行号和结束行号所指定的范围的内容作为命令command的输入.不会改变当前编辑的文件的内容.
其它命令:
写完命令行,在最后加上$,将命令挂到后台运行.
正在运行指令时,按Ctrl+Z,将进程挂到后台并暂停.
bg 命令在后台运行被暂停的作业.
fg 将后台作业放到前台运行.
objdump命令可以用来查看链接后的输出可执行文件的内容.
关于c++编辑:
#include 指令的两种使用形式:
(1) 尖括号告诉编译器在一个或者多个标准系统目录中找到文件/usr/include /usr/local/include;
(2) 双引号意味着首先搜索本地目录(如果在本地目录找不到,再到标准系统目录中找),但是具体搜索哪个目录依赖于编译器。
有些编译器搜索源代码文件所在目录,有些编译器搜索当前工作目录,有些搜索工程文件所在目录。gcc的本地目录,默认情况下就是源码(.c文件)所在目录,当然也可以用-I指定本地目录(可以用多个-I指定多个本地目录)
gcc默认就会搜索/usr/include /usr/local/include的,你还可以设置环境变量CFLAGS=-I /somewhere $CFLAGS增加搜索路径.
其它:
文件结束符----EOF