安装vim包:
sudo apt-get install vim
普通用户到超级用户的切换:
sudo su
退出超级用户:
ctrl+d 或者exit
vim有三种常用模式:普通模式(默认)、编辑模式、命令行模式。
普通模式到编辑模式:i 退回普通模式:esc按键(escape)
普通模式到命令行模式用:(冒号) 退回普通模式:esc按键(escape)
:w ——内存中的东西写入到磁盘。相当于保存
:q ——退出编辑器vim
:wq ——保存,退出
vim的基本操作
dd ——删除一行
cc ——修改一行
d 2 w ——从光标所在处开始,删除两个单词
dG ——从光标所在处,一直删除到结尾
u ——撤销(undo)
:h ——vimhelp
:bd ——bufferdelete:删除缓冲区,关闭帮助内容
:h bd ——查看关于bd的解释文档 bdhelp
在help文档里面,当光标移动到链接(如tutor)的地点时,用ctrl+右方括号 打开链接;用ctrl+o关闭链接。
vimtutor ——bash命令,vim教程
粘贴和复制:
shift+v ——选中光标所在行
按j、k选中多行
d ——剪切
y ——(yank)复制,原来的文本保留
p ——(past)粘贴
在一个文件里打开两个文件:
:vnew ——竖着打开两个文件
:new ——横着打开两个文件
:bd ——光标光标所在的文件
ctrl+ww ——光标在窗口间切换
关闭vim的快捷键:shift+zz 相当于:wq!
在vim中用 / woed ——查找
n ——查找下一处
N ——查找上一处
:3 ——跳转到第三行
u ——撤销undo
ctrl+r ——返回 redo
vim的配置操作:
set nu ——显示行号
set nonu ——取消显示行号
set ai ——自动缩进(auto indent)
set noai ——取消自动缩进
map <tab>:bn<cr> ——按下tab执行:bd的功能:影像
这些设置都可以写到一个配置文件里,成为默认的规则。在/home/shsf/.vimrc 里面进行配置。在.vimrc(隐藏文件)里面双引号表示注释
关于:bn ——已经用vim打开了文件a。命令行里面输入:e (编辑)或者:o(打开)另一个文件。这样用:bn切换缓冲去。用来在两个文件的切换显示。:bd只关闭当前缓冲区而:wq是关闭vim。
vim的插入模式的快捷键
ctrl+n ——联想补齐一个单词(这个单词在本文件中已经出现过)
ctrl+x+l ——行补齐,输入行首字母可以补齐一行
ctrl+x+k ——字典功能,输入单词的前几个字母,显示字典里的相关单词
字典需要的.vimrc配置内容:
set dictionary+=~/.vim/dict/simple
set dictionary -=/usr/share/dict/words dictionary +=/usr/share/dict/word
后两个功能的实现需要一些插件。还有象taglist(象目录一下的显示在一旁)、snipmate(用简单的几个字母显示一个小的片段,比如输入fun按下tab后就显示处函数的结构)
怎样得到插件?
git clonegit://github.com/happypeter/peter-vim.git 得到所需的插件
然后把peter-vim改名为.vim(隐藏文件)并移动到自己的HOME即/home/shsf/下
(读里面的readme文件)
vim的录音
在normal mode下输入一个q在输入任何一个字母就进入recording列入按下qq后面的q表示记录区。之后对vim的操作都被记录下来包括进入insert mode 。退回到normal mode以后按q退出recording。还在normalmode下按@+q播放处理。就是把以上做的重复做一遍。
vimdiff a b ——用vim以字母为单位显示文件a和文件b的不同(bash命令)
:diffsave ——在vim中查看文件的更改内容,高亮显示缓冲区里跟硬盘文件的不同(同一个文件而言的)
jj as esc ——用map完成配置。这样方便vim操作。
locate filename ——定位文件,显示文件的绝对路径。
关于make
在工程比较大的时候,调试过程中每次gcc后面的文件都要写,并且很多。方便起见可以用make。在工程的目录下执行如下操作
vim makefile 或者vim Makefile 并输入内容(第二行要tab开头)
all:
gcc main.c hello.c hello.h
clean:
rm –rf a.out hello.h.gch
插入文件名的快捷键: ctrl+x+f
这样以后在bash下执行make就可以执行gcc操作了
执行make clean 就执行rm –rf a.out hello.h.gch了
在vim中 :make可以执行bash中的make命令对文件进行编译。如果有错误。回车后返回vim。 :cw(或者:cwindou)可以在vim下方开辟一个新的小窗口显示错误信息。
:cn和:cN高亮行在多个错误信息上上下移动。回车 光标跳转到程序里对应的错误位置
:cclose 关闭quickfix(刚才的错误信息显示窗口)
在vim中执行bash命令 :!command 回车就可以返回vim
在bash中返回上一次的路径 cd -
vim常用快捷键
normal mode | |
移动光标 | h j k l |
ctrl+f | forward 向前翻页 |
ctrl+b | backward 向后翻页 |
ctrl+u | up 向上移动半屏 |
ctrl+d | down 向下移动半屏 |
0 | the first number 移动到行首字符 |
$ | 移动到行尾字符 |
shift+h | head 移动光标第一行 |
shift+m | middle 移动到中间行 |
shift+l | low 移动到最下一行 |
gg | 到首行 |
G | 最后一行 |
5<cr> | 到第5行 |
/word | 查找word |
n | 向下再查找word |
N | 向上再查找word |
x X | x 后前删除(del);X向前删除(backspace) |
dd | 删除一行 |
5dd | 删除光标开始向下的5行 |
d1G | 删除光标以前的 |
dG | 删除光标以后的 |
yy | 复制(参考删除) |
nyy | |
y1G | |
yG | |
p P | p向下粘贴;P向上粘贴 |
u | undo |
ctrl+r | redo |
. | 小数点:重复上一步操作 |
shift+v | 行选 |
ctrl+v | 块选 |
insert mode | |
ctrl+n | 单词补齐(以前出现过) |
ctrl+x+l | 行补齐 |
ctrl+x+k | 字典功能(用ctrl+n/p换词) |
commend mode | |
:set nu | number |
:set nonu | no number |
:set ai | auto indent |
:set noai | no autoindent |
shift+zz | :wq! |
:100,200/a/b/g | 100到200行间的a换成b |
:1,$s/a/b/g | 全换 |
:1,$s/a/b/gc | 全换有提示等用户确认 |
多窗口 | |
:sp | 不加文件名再代开已打开的文件,也可以加文件名,用:q关 |
ctrl+ww | 光标窗口切换 |
:vnew (filename) | 竖着再代开一个新窗口,用:bd关 |
:e或:o | 打开一个文件覆盖原先的,用:bd关,:bn切换 |
vim技巧:
如果要讲vim里的一个a字符改成c——讲光标移到a处,然后按r放开后再按c。
注释一行 ——ctrl+c
注释一块:块选然后 ctrl+c
取消就是一个 u
交换两个相邻字母的位置:按x然后按p(剪切再粘贴)
taglist ctags nerdtree snipmate
1. taglist(标签列表) :
在vim中执行 :Tlist 会在窗口的左半部分出现一个关于vim里程序的提纲。
用ctrl+ww 把光标在两个窗口直接切换
在taglist中移动光标到函数名<cr> 在右边查看函数体;ctrl+o 返回。
再执行 :Tlist 退出。
/home/shsf/.vimrc中的相关配置 map ,t :Tlist
2. ctags
如果想从程序中的函数名去查看对应的函数体语句:
在bash中执行命令ctags hello.c hello.h main.c(自己关心的文件)
如此后生成一个名为tags的文件。之后
在vim中就可以把光标移动到函数名上ctrl+】跳转到对应函数体;ctrl+o返回。
3.nerdtree
命令 :NERDTreeToggle
/home/shsf/.vimrc中配置 map ,n :NERDTreeToggle
也是在窗口左半边上显示列表。
ctrl+ww光标在两个窗口间实现切换
在左窗口移动光标到函数或宏定义名字上<cr> ,在右侧实现对应显示
4. snipmate(小片助手)
实现输入几个字符后按tab出现一小片对应文字的功能,配置文件位于
/home/shsf/.vim/snippets/c.snippets
格式如下
#incude<...> 注释行,顶头的#表示注释
snippet inc
#include<${1:studio.h}>${2}
说明如下:snippet为固定格式 inc是要输入的提示字符。当有inc输入并按下
tab按键是就显示下面的内容 其中$表示下一个tab跳转的位置,数字1表示tab的顺序序号。冒号后面的的内容为默认内容,如果确认内容就按tab到下一处,否则可以直接修改。
map与imap的区别:
当两个映射以相同的字符顺序开始,它们是含糊的.
例如:
:imap aa foo
:imap aaa bar
当 Vim 读如 "aa", 它将需要取得另外一个字符才能决定是否是 "aa" 或是 "aaa"
应该被映射. 这意味这当输入 "aa" 以后映射还不会展开, Vim还在等待另一个字符.
如果你输入一个空格, 那么 "foo" 将被插入, 而不是空格. 如果你输入一个"a",
那么"bar" 将被插入.
vim中全局查找替换
%s /a/b/g ——把所有的a都换成b
%s/\/home\/shsf\//a/g ——把/home/shsf/路径换成a(/需转义)
把光标移动到 { 处。按%光标会自动跳到与之成对的 } 上面。反之也可以。
把函数体折叠起来:
把光标移动到函数开始的 { 处, 然后(normal mode)输入zf%——创建函数折叠;
在已经折叠的加号位置输入 zc ——打开折叠的函数。
当要把打开的函数再折叠就输入 zx ——关闭(第二次折叠)
shift+v块选以后,输入 zf ——实现块折叠。
块选 输入 > ——缩进
块选 输入 < ——缩进返回
在insert mode下对齐函数语句:
ctrl+t 往右移动对齐
ctrl+d 往左移动对齐(设置tab为4个空格,而某行只缩进了3个空格。这时执行ctrl+t可以再缩进一个空格达到对齐的效果)
如果需要对函数进行注释,可以讲光标移动到函数名处,执行:Dox 给出注释格式,方便的添加注释内容。包括主题变量和返回值。
vim常用快捷键
normal mode | |
移动光标 | h j k l |
ctrl+f | forward 向前翻页 |
ctrl+b | backward 向后翻页 |
ctrl+u | up 向上移动半屏 |
ctrl+d | down 向下移动半屏 |
0 | the first number 移动到行首字符 |
$ | 移动到行尾字符 |
shift+h | head 移动光标第一行 |
shift+m | middle 移动到中间行 |
shift+l | low 移动到最下一行 |
gg | 到首行 |
G | 最后一行 |
5<cr> | 到第5行 |
/word | 查找word |
n | 向下再查找word |
N | 向上再查找word |
x X | x 后前删除(del);X向前删除(backspace) |
dd | 删除一行 |
5dd | 删除光标开始向下的5行 |
d1G | 删除光标以前的 |
dG | 删除光标以后的 |
yy | 复制(参考删除) |
nyy | |
y1G | |
yG | |
p P | p向下粘贴;P向上粘贴 |
u | undo |
ctrl+r | redo |
. | 小数点:重复上一步操作 |
shift+v | 行选 |
ctrl+v | 块选 |
insert mode | |
ctrl+n | 单词补齐(以前出现过) |
ctrl+x+l | 行补齐 |
ctrl+x+k | 字典功能(用ctrl+n/p换词) |
commend mode | |
:set nu | number |
:set nonu | no number |
:set ai | auto indent |
:set noai | no autoindent |
shift+zz | :wq! |
:100,200/a/b/g | 100到200行间的a换成b |
:1,$s/a/b/g | 全换 |
:1,$s/a/b/gc | 全换有提示等用户确认 |
多窗口 | |
:sp | 不加文件名再代开已打开的文件,也可以加文件名,用:q关 |
ctrl+ww | 光标窗口切换 |
:vnew (filename) | 竖着再代开一个新窗口,用:bd关 |
:e或:o | 打开一个文件覆盖原先的,用:bd关,:bn切换 |