01) 一般模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
j
h l
k
C-p 同k
C-n 同j
w 下一个单词词首
b 上一个单词词首
e 下一个单词词尾
ge 上一个单词词尾
f 在当前行向右查找某个字符,光标在目标字符上
F 在当前行向左查找某个字符,光标在目标字符上
t 在当前行向右查找某个字符,光标在目标字符之前
T 在当前行向左查找某个字符,光标在目标字符之前
3fa 向右查找第3个a字符,";"向同方向重复,
3Fb 向左查找第3个b字符,","向反方向重复
50% 光标移动到文档的百分比位置
(/) 上一句首/下一句首
{/} 上一段首/下一段首
[[ 上一{
]] 下一{
][ 下一}
[] 上一}
[{ 跳到{}块首{,同%
]} 跳到{}块尾},同%
% 在匹配(){}[]的括号首尾切换
+ 下一行行首非空格符(同Enter)
- 上一行行首非空格符
H 屏幕顶
M 屏幕中
L 屏幕尾
G 文件尾
gg 文件首
nG 第n行
n 向右移动n个字符
n 向下移动n行
C-f 前翻页
C-b 后翻页
C-d 前翻页页
C-u 后翻半页
C-e 屏幕前卷一行
C-y 屏幕后卷一行
C-x 光标处数字减1
C-o 往前跳转到上一个跳转点
C-i 往后跳转到下一个跳转点
`` 跳转到上次起跳的位置
'' 跳转到上次起跳的位置的行首(停留行)
'. 移动光标到上一次的修改行(修改行)
`. 移动光标到上一次的修改点(修改点)
注意:对此命令而言,只要执行一个命令使光标定位到当前行外的某一行去,都叫跳转;像搜索类命令/和n都叫做跳转,但字符搜索类命令f和t等、以word为单位的移动光标命令w和e等、以及j、k命令都不叫跳转。
>> 右缩进
<< 左缩进
0 行首
^ 行首首字符
$ 行尾字符
x 删除光标处字符
nx 删除光标后n个字符
X 删除光标前字符
nX 删除光标前n个字符
dd 删除光标所在整行
D 删除从当前光标位置开始的整个行
J 合并光标所在行与下一行
a 进入插入模式并追加到光标后面
A 进入插入模式并追加到当前行末尾
i 进入插入模式并在当前光标处插入
I 进入插入模式并在当前行的开始处插入
c 更改选中的区域
C 更改从光标当前位置开始的整个行
o 光标当前位置下增加新的行,并进入编辑模式
O 光标当前位置上增加新的行,并进入编辑模式
r 替换光标当前位置的单个字符
R 替换从光标当前位置开始的多个字符,并在退出插入模式时结束
s 删除当前光标处字符,并进入编辑模式
S 删除光标处整行,并进入编辑模式
p 将复制的数据粘贴到光标之后
P 将复制的数据粘贴到光标之前
u 撤消最后的更改
C+R 重做
ndd 删除光标向下n行
d1G 删除光标所在行到第1行
dG 删除光标所在行到文件尾
dh 删除光标左1字符
dl 删除光标右1字符
daw 删除光标右1单词
diw 删除光标左1单词
das 删除光标右1句子
dis 删除光标左1句子
dip 删除光标右1段
dap 删除光标左1段
yy 复制光标所在行
Y 复制整行 ( yy )
y1G 复制光标所在行到第1行
yG 复制光标所在行到文件尾
yfa 拷贝从当前光标到光标后面的第一个a字符之间的内容
dfa 删除从当前光标到光标后面的第一个a字符之间的内容
~ 将光标处的字符切换成大(小)写,移动光标到下一字符处
q: 打开命令行窗口(可浏览历史命令。)
*(#) 当光标停留在某个单词上时, 查找与该单词匹配的下(上)一个单词
g*(g#) 与上条命令相似, 查找匹配包含该单词的所有字符串
gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的注释段外首次出现处
/ 表示向下查找,n 查找下一个匹配
? 表示向上查找,N 反方向查找
快速处理 '、"、()、[]、{}、<> 等配对标点符号中的文本内容,包括更改、删除、复制等。
1) ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
2) di'、di"、di(、di[、di{、di< - 分别删除这些配对标点符号中的文本内容
3) yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
gC-g 单词统计
K 查找"光标处的单词"的man帮助文档
zNN 将屏幕的显示缓冲高度设置为NN行
z 屏幕上移,光标所在行作为屏幕顶行,光标移动到行首非空字符
zt 屏幕上移,光标所在行作为屏幕顶行,
z. 屏幕中移,光标所在行作为屏幕中间行,光标移动到行首非空字符
zz 屏幕中移,光标所在行作为屏幕中间行,
z- 屏幕下移,光标所在行作为屏幕底行,光标移动到行首非空字符
zb 屏幕下移,光标所在行作为屏幕底行,
ze 屏幕右移,光标处于行尾
zs 屏幕左移,光标处于行首
zh 屏幕右移,
zl 屏幕左移,
ZZ 保存退出
ZQ 不保存,退出
02) 折叠::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:1,5fo 折叠1到5行
zfap 折叠一段
v选定范围后zf 折叠选定范围
zf F-old creation (创建折叠)
zo O-pen a fold (打开折叠)
zc C-lose a fold (关闭折叠)
zr R-educe打开1层的若干个折叠(不含嵌套)
zm M-ore关闭1层的若干个折叠(不含嵌套)
zR 打开嵌套折叠(全文,折叠内折叠)展开全文
zM 关闭嵌套折叠(全文,折叠内折叠)收起全文中的折叠
zC 关闭光标处嵌套折叠(折叠内折叠)
zO 打开光标处嵌套折叠(折叠内折叠)
zf5j 折叠当前行与之后5行
zf4k 折叠当前行与之前4行
6zF 折叠光标处与下共6行
zd1 删除折叠标记1
zd 删除光标所在位置的折叠
zD 删除光标处的所有嵌套折叠(折叠内折叠)
zE 删除窗口中所有折叠
za 展开/折叠转换
zA 展开/折叠转换(嵌套)
03) 编辑模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
C-o 临时执行一条命令
C-\ C-o 同上
C-c 同ESC退出编辑模式
C-[ 同ESC退出编辑模式
C-h 删除光标前1字符
C-w 删除光标前1单词
C-u 删除光标前所有字符
C-z 临时切换到shell
C-t 将本行右缩进
C-d 将本行左缩进
C-y 按光标所处列的上一行处的字符重复输入
C-e 按光标所处列的下一行处的字符重复输入
C-rX 在编辑模式下粘贴寄存器X中的内容
C-k?? 在编辑模式下插入特殊字符? ?(:digraphs 查看所有特殊字符)
C-a 重复插入上次在插入模式下输入的文本(第1次插入模式下输入文本,,移动光标到下一个插入位置,,,将在第2个光标位置重复插入第1次插入模式下输入的文件)
C-@ 同上,重复插入上次在插入模式下输入的文本,并退出编辑模式
C-x 进入C-X模式
C-X模式基本上是用来自动匹配的。
vim可以自动匹配完成的内容包括:
C-x C-l 整行自动匹配:C-l继续匹配下一行
C-x C-i 在头文件中查找匹配单词
C-x C-f 在系统中搜索路径/文件名匹配
C-x C-] 在tag中补全单词
C-x C-d 在头文件中查找宏定义
C-x C-k 在词典中搜索匹配单词
C-x C-t 在近义词词典中搜索匹配单词
C-x C-v 显示Vim命令行
C-x C-e 在插入模式下让屏幕往上滚一行
C-x C-y 同上,屏幕下滚一行
C-p 在全文中自动匹配单词:匹配下一个
C-n 在全文中自动匹配单词:匹配上一个
将光标移动到本行之外的命令,即一个“跳转”
j/k不作“跳转”
C-o 光标跳转一个“较老”位置
C-i 光标跳转一个“较新”位置
左Alt-h/j/k/l 光标左/下/上/右移动,并退出编辑模式
左Alt-0 光标移到行首,返回命令模式
左Alt-$ 光标移到行尾,返回命令模式
04) 末行命令模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
04-01) 末行命令模式下编辑快捷键:
C-b 命令行行首
C-e 命令行行尾
C-u 删除光标前所有字符
C-h 删除光标前1字符
C-w 删除光标前1单词
C-c 退出命令行模式
Alt-h/j/k/l 退出编辑,取消命令行模式
04-02) 末行命令模式:
:.,.+5w file 从当前行开始将6行内容存入文件file
:1,$w! file 将全文件内容强制存入file
:.,$d 删除当前行至文件尾的内容
:,24y 表示拷贝光标所在行到第24行之间的内容
:12,y 表示拷贝第12行到光标所在行之间的内容
:6,9 co 12 复制第6行到第9行之间的内容到第12行后面
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
:'a,'b co 'c 把 co 改成 m 就成剪切了
:'a,'b m 'c 剪切+粘贴
:5, 9 de 删除多行
:abbr 即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个字符串
比如编写java文件的常常输入 System.out.println, 这很是麻烦
所以应该用缩写来减少敲字. 可以这么做:
:abbr sprt System.out.println
以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.out.println6.
:g/^\s*$/d 删除所有不包含字符的空行(内容为空格或制表符的行也算空行)
:g/^$/d 删除空行(内容为空格或制表符的行不算空行,将保留)
:set number 显示行号
:set nonumber
:set ignorecase 忽略大小写
:set incsearch 查找时输入字符串过程中匹配即显示
:set noncsearch
:set hlsearch 高亮显示匹配
:set nohlsearch
:set filetype=c/txt/... 设置文件类型
:set backgroud=dark/light 设置背景色
:syntax enable 语法加亮
:syntax clear 关闭色彩显示文本
:syntax off 完全关闭使用色彩
:set syntax=ON 激活语法加亮功能
:set autoindent 自动缩进
:set showmatch 显示匹配
:set matchtime=15 等待1.5秒显示匹配
:display X 显示寄存器X的内容
:reg 显示寄存器
:digraphs 显示特殊字符
:set tabstop=3 改变制表符
:file 显示当前打开的文件(缓冲区列表) ( C-g )
:ls 显示当前打开的多文件(缓冲区列表)
:buffers 显示当前打开的多文件(缓冲区列表)
:N 切换到同时打开的多文件中的上一个文件
:n 切换到同时打开的多文件中的下一个文件
:bp 循环切换到打开的多文件中的上一个文件
:bn 循环切换到打开的多文件中的下一个文件
:bf 切换到打开的多文件中的第一个文件
:bl 切换到打开的多文件中的最后一个文件
:bd [N] 删除当前文件(缓冲区列表N)
:bdelete bufname 删除指定缓冲区列表中文件
:bdelete N1 N2 删除缓冲区列表中多个列表编号
:N,Mbdelete 删除缓冲区列表中从N到M
:badd 增加一个新的文件到缓冲区列表中
:sbl 将多文件缓冲区列表中的最后一个文件显示到新的窗口中
:sbf 将多文件缓冲区列表中的第一个文件显示到新的窗口中
:qall 退出所有窗口
:wall 保存所有窗口
:wqall 保存并退出所有窗口
:qall! 不保存退出所有窗口
:e! 放弃修改,重新打开文件
:! 在 Vim 会话外执行 '
:q 不保存,退出
:q! 不保存,并强制退出
:x 保存并退出
:wq 保存并退出
:w !sudo tee % 普通用户编辑并保存超级用户权限的文件
04-03) 标签页
:tabnew filename 在新的标签页中打开文件
:tabe filename 同上
:tabc 关闭当前标签页
:tabp 切换到前一标签页中
:tabn 切换到后一标签页中
:tabm N 将当前标签页编号(排序)
04-04) 多窗口编辑多文件
:sp(:vsp) 文件名 vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看
到帮助信息.
:split 文件名 同时在一个屏幕中分屏(横屏)显示多个文件的内容,类似多窗口
:vsplit 文件名 同时在一个屏幕中分屏(竖屏)显示多个文件的内容,类似多窗口
:e 文件名 vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
:set diff 多窗口中比较文件
c-w-w 将光标循环定位到各个窗口之中
c-w-f 切分显示光标处的单词作为文件名
VIM 会在 path 中搜索该文件名,比如常用它打开 #include 语句中的文件
c-w-_ 当同时打开几个文件时,按 _ 使当前窗口最大化
C-w命令指定光标移动
C-w + 扩大窗口
C-w - 缩小窗口
C-w = 将所有窗口恢复到默认大小
C-w f 将当前光标处的字符作为文件名,在新的窗口中打开
C-w gf 将当前光标处的字符作为文件名,在新的标签中打开
C-w h 移动到左窗口
C-w j 移动到下窗口
C-w k 移动到上窗口
C-w l 移动到右窗口
C-w H 将当前窗口的位置重新排列到所有窗口的左方
C-w J 将当前窗口的位置重新排列到所有窗口的下方
C-w K 将当前窗口的位置重新排列到所有窗口的上方
C-w L 将当前窗口的位置重新排列到所有窗口的右方
C-w q 退出当前窗口
C-w o 关闭当前窗口之外的其它所有窗口
C-w n 打开一个新的空白窗口
C-w c 关闭当前窗口
C-w T 多个窗口时,将当前窗口作为一个新的标签中打开
:windo {command} 在所有窗口中同时执行命令
:ls 看本 vim 程序已经打开了多少个文件, 在屏幕的最下方会显示出如下数据:
1 %a "usevim.html" 行 162
2 # "xxxxxx.html" 行 0
其中:
1 表示打开的文件序号, 这个序号很有用处.
%a 表示文件代号, % 表示当前编辑的文件,
# 表示上次编辑的文件
"usevim.html" 表示文件名.
行 162 表示光标位置.
:b 序号(代号) 此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
就是用 :ls 命令看到的.
:set diff 此命令用于比较两个文件,在每个文件窗口中输入此命令
在启动vim时,可用"vim -o file1.a file2.b“在上下2个窗口中同时编辑多个文件
用"vim -O file1.a file2.b" 在左右2个窗口中同时编辑多个文件
04-05) 宏替换(快捷键)
vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
因此我把它们定义到 - 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.
map <要映射键> <被映射的按键序列>
:map e ea 定义键e为按键序列ea
:map 显示已定义快捷键
:mapclear 清除所有已定义快捷键
:nmap是:map的普通模式板,也就是说其绑定的键只作用于普通模式。
:unmap e 取消定义a
:nmap :nohls 取消被搜索字串的高亮
:nmap w 命令模式下转移光标到不同窗口
:imap 输入模式下运行
:nmap :%s= *$== 删除所有行尾多余的空格.
:imap 同上
:java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
会说到如何实现这一点)
:nmap :comp javac:mak -d . %
此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定
义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:
setlocal makeprg=javac
setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
:nmap :comp ant:mak
此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装
vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要
在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.
:nmap :cl 此命令用于查看所有的编译错误.
:imap
:nmap :cc 此命令用于查看当前的编译错误.
:imap
:nmap :cn 此命令用于跳到下一个出错位置.
:imap
:nmap :cp 此命令用于跳到上一个出错位置.
:imap
:nmap :JavaBrowser
此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
:imap
04-06) 制表符TAB
<< 输入此命令则光标所在行向左移动一个 tab.
>> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是tab. 没关系, vim 能帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.
:set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
:set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
:set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
:set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
文件格式自动匹配autocmd 这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.
:autocmd! 删除所有之前的自动命令.
autocmd FileType java source ~/.vim/files/java.vim
autocmd FileType java source ~/.vim/files/jcommenter.vim
以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel
以上这条命令让我在新建java 文件时自动加入 java.skel 文件的内容.
autocmd BufNewFile *.java normal gnp 以上这条命令让我在新建java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.
04-07) 视图模式下注释整块内容
C-v> 选定要注释掉的行
列块选定后I是在前边都插入,A是在后边都插入
之后输入的东西就是插入到选定的行前边(后边)的,直至Esc.
删除整块的注释时,
C-v> 选定整块的注释//, 再按d删除
v选定范围后= 对选定范围内自动格式(适用于编程)
04-08) 寄存器操作
Vim可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴
"<寄存器名称> 按下 " 键和另一个字符键,便可以定义一个寄存器。例如:
"a "1
定义寄存器后直接进行操作
"ayy 将当前行复制到寄存器 a 中
"ap 将寄存器 a 中的内容粘贴到光标之后
"ayy "ayy复制当前行(整行)到寄存器a中
"AY "Ayy追加当前行到寄存器a中
3"Ayy 追加3行到寄存器a中
"Ay3j 追加3行到寄存器a中(同上)
5"ayy 复制五行内容至寄存器a。
5"Ayy 再复制五行附在寄存器a内容之后,现在寄存器a中有十行内容了!
* 通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;
您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
* 没有指定寄存器时,Vim使用“无名寄存器”存储内容
使用撤销分支功能
可以使用 :undolist 命令查看缓冲区存在的撤销分支列表。而通过 :undo <> 命令则能够移到撤销的某个分支。
寄存器的主要有以下几种:
a. The unnamed register ""
"d", "c", "s", "x" 和 "y" 等涉及删除或拷贝的命令都会将内容存放于此(有例外)。
b. 10 numbered registers "0 to "9
0 为最近拷贝的内容,1-9 为最近删除的内容。
指定 named register 时不会存放于此。
c. The small delete register "-
删除不多于一行的内容会存在于此。
d. 26 named registers "a to "z or "A to "Z
小写与大写的区别是,小写是覆盖方式,大写是添加方式。
e. four read-only registers ":, "., "% and "#
". 存放上次插入的文本
有什么用?呵,例如,你输入了一段文本,在另一个地方也要有相同的内容,你输完后,一般要选择并复制一下吧?而用这个,直接移到需要插入的地方,i. 即可。
"% 是当前编辑文件全名,vim 中,% 就是代表当前编辑文件名的变量,不过,一般直接用 % 就行,例如":!cat %",vim 会自动扩展。
"# 是alternate file 名称 (这个我不知道)
": 上次执行的命令,记起来比较容易,冒号就是命令行提示符嘛。这个有些什么用呢?在测试配置文件时十分有用,先在命令行输入命令,调试好后,在 insert mode 里按C-R : 就可将该命令插到文件中。
f. the expression register "=
表达式寄存器,可以输入一个表达式,并插入结果。
g. The selection and drop registers "*, "+ and "~
跟 gui 即 X/Windows 剪贴板有关的变量。
在 X 中,鼠标中键与系统剪贴板不一样,至于区别,大家自己试验一下,这里给个提示,在命令行下输入 reg 可以列出所有寄存器的内容。
h. The black hole register "_
黑洞
i. Last search pattern register "/
上次搜索的内容。例如,我要搜索一个单词 linuxforum,但我比较懒,先输入 /linux,发现出现很多个 linux,多次按 n 无果,难道要重新输入 /linuxforum ? 不用,只需要 //forum 即可。呵,聪明的你一定想到了,用命令行历史也可以调来,按 C-p 或 C-n即可上下翻阅。这样也可以嘛,也比较快捷,但要查找 forumlinux 呢?
用 C-r 的话只需 /forum/ 。
在使用X Window系统时,有两个特殊的寄存器是需要注意一下的:”"*”访问的寄存器是X的主选择区域
(primary selection),”"+”访问的寄存器是X的剪贴板(clipboard)。
=====================================
存入寄存器:
1)在visual模式下,输入:”寄存器y”
2)录制的时候:输入:“q{regsiter}”,使用:在normal模式下,按“@{regsiter}”
================================
调用寄存器:
在插入模式里,按C+r,再按寄存器名,如调用寄存器a:
C+r,a就可以了。
======================================
vim常用的寄存器:
‘”‘ 无名寄存器,包含最近删除或抽出的文本
‘%’ 当前文件名
‘#’ 轮换文件名
‘*’ 剪贴板内容 (X11: 主选择)
‘+’ 剪贴板内容
‘/’ 最近的搜索模式
‘:’ 最近的命令行
‘.’ 最近插入的文本
‘-’ 最近的行内 (少于一行) 删除
‘=’ 表达式寄存器;你会被提示输入一个表达式
==============================================
04-09) 自定义的标记
m{mark} 用{mark} 标记当前的光标位置。你可以在文本中使用 26 个标记(a到z)。这些标记是不可见的,只
是一个由 Vim 记住的位置。
打开了多个文件时,可以用A-Z来标记不同文件的不同标记,在不同的文件中跳转。
`{mark} {mark} 是指定义标记的那个字母。所以,移到标记a的命令是: 'a
'mark (单引号加上一个标记)会移到标记所在行的行首
:marks 显示标记列表
`` 跳转之前的位置
'' 跳转之前的位置的行首
使用宏来做一些重复工作
q{mark}:使用q键然后跟一个a–z键,就可以开始记录键盘动作。
q:在记录键盘动作开始之后,再次按下q键,就停止记录。
@{mark}:使用@键然后跟一个a–z的字母,就会触发你刚才的记录的键盘动作。
@@:键入连续两个@@就可以重复上次的宏。
vim_gcc(help quickfix)在vim编辑器中进入编译程序
:set makeprg=gcc\ -Wall\ -otest\ test.c\ -std=c99\ -g
使用\是对空格进行转义
:make vim自动按照makeprg选项定义的进行编译,并把编译输出重定向到一个临时文件中,当编译出错时,vim会从上述临时文件中读出错误信息,形成quickfix列表,并跳转到第一个错误地方。
quickfix模式常用命令:
:cc 显示详细错误信息
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有错误
:cw 如果有错误列表则打开quickfix窗口
:cold 到前一个较旧的错误列表
:cnew 到后一个较新的错误列表
05) SourceInstall:::::::::::::::::::::::::::::::::::::::::::::::::::::::
tar xjvf /mnt/sda5d/Linux/Software/vim-7.3.tar.bz2 -C /tmp
cd /tmp/vim-7.3/
./configure --prefix=/usr/local/vim73 --enable-cscope --enable-tclinterp --enable-rubyinterp --enable-sniff --enable-multibyte --enable-hangulinput --enable-gnome-check
make && make install
用户自定义配置~/.vimrc
filetype plugin on
filetype indent on
syntax on
set number
"set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default
set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default
用vim编辑远程文件:
vim ftp://love@192.168.135.2/sda5d/fglrx-install.log
REMOTE EDITING
:e dav://machine[:port]/path uses cadaver
:e fetch://[user@]machine/path uses fetch
:e ftp://[user@]machine[[:#]port]/path uses ftp autodetects <.netrc>
:e http://[user@]machine/path uses http uses wget
:e rcp://[user@]machine/path uses rcp
:e rsync://[user@]machine[:port]/path uses rsync
:e scp://[user@]machine[[:#]port]//path/file uses scp
:e sftp://[user@]machine/path uses sftp
REMOTE READING
:Nread ? give help
:Nread "machine:path" uses rcp
:Nread "machine path" uses ftp with <.netrc>
:Nread "machine id password path" uses ftp
:Nread "dav://machine[:port]/path" uses cadaver
:Nread "fetch://[user@]machine/path" uses fetch
:Nread "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects <.netrc>
:Nread "http://[user@]machine/path" uses http uses wget
:Nread "rcp://[user@]machine/path" uses rcp
:Nread "rsync://[user@]machine[:port]/path" uses rsync
:Nread "scp://[user@]machine[[:#]port]/path" uses scp
:Nread "sftp://[user@]machine/path" uses sftp
REMOTE WRITING
:Nwrite ? give help
:Nwrite "machine:path" uses rcp
:Nwrite "machine path" uses ftp with <.netrc>
:Nwrite "machine id password path" uses ftp
:Nwrite "dav://machine[:port]/path" uses cadaver
:Nwrite "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects <.netrc>
:Nwrite "rcp://[user@]machine/path" uses rcp
:Nwrite "rsync://[user@]machine[:port]/path" uses rsync
:Nwrite "scp://[user@]machine[[:#]port]/path" uses scp
:Nwrite "sftp://[user@]machine/path" uses sftp
http: not supported!
REMOTE DIRECTORY BROWSING
:e [protocol]://[user]@hostname/path/
:Nread [protocol]://[user]@hostname/path/
LOCAL DIRECTORY BROWSING
:e /some/path/to/a/directory
06) 从2011-07开始转向使用emacs编辑器,vim只在修改服务配置文件时使用。其它如编辑学习文档或者脚本编程时使用emacs。
阅读(2180) | 评论(0) | 转发(0) |