vim

  1. 常用操作
  2. 安装
    1. 帮助
      1. 中文帮助安装
  3. 无插件Vim编程技巧
    1. 跳转

常用操作

1
2
:g/profile/d
:g!/^\s*"/d

安装

1
2
# 可选源:http://mirrors.sohu.com/centos/5/os/x86_64/CentOS/
yum install vim-X11 vim-common vim-enhanced vim-minimal -y

源码编译VIM

帮助

1
2
3
4
help
help usr_29
help syntax.txt
help vsplit

中文帮助安装

http://vimcdoc.sourceforge.net/下载,或者直接http://sourceforge.net/projects/vimcdoc/files/vimcdoc/,解压后其中有个doc文件夹, 将其中的内容全部复制到~/.vim/doc, 或者vim安装目录下的doc目录中看解压出来的文件中的INSTALL文档。如果你是第一次接触vim,那么使用”:help tutor“或”:help tutor@cn“,你就会看到一个30分钟的vim教程

无插件Vim编程技巧

转自:无插件Vim编程技巧

跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
hjkl
HML 跳到屏幕的顶上 中间 下方
CTRL-B 上翻页 :help scroll.txt
CTRL-F 下翻页
翻页 ctrl-f ctrl-b : f就是forword b就是backward
翻半页 ctrl-d ctlr-u : d=down u=up
滚一行 ctrl-e ctrl-y

zz 让光标所杂的行居屏幕中央
zt 让光标所杂的行居屏幕最上一行 t=top
zb 让光标所杂的行居屏幕最下一行 b=bottom

w 跳到下一个单词的开始
e 跳到单词的结束
b 向后跳
^ 行首
$行尾
0 第一个字符
ta 跳到下一个a 前面
fa 跳到下一个a
大写的意思相反

gg 跳到文件的开始
G 跳到文件的结束
10gg 或10G 跳到第10行
% 跳转到配对的括号去
[[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
[{ 跳到代码块开始
gD 跳转到局部变量的定义处
gg 跳到第一行
G 跳到最后一行
\'\' 跳转到光标上次停靠的地方, 是两个\', 而不是一个\"
CTRL-O 跳回上个文件

aaa
aaa

    <!-- :E - 编辑,浏览目录
    :cd <dir> – 改变当前目录
    :pwd  - 查看当前目录
    :ls - 查看缓冲区
    :buffer 4 - 打开指定浏览缓冲区

    :He 上下分屏,全称为 :Hexplore
    :Ve 左右分屏,全称为 :Vexplore
    :set scb    分屏同步移动
    :set scb!   解开分屏同步移动

        窗口大小:[查看vim的`help split`]
        CTRL-W +	扩大(高度)
        CTRL-W -	缩小(高度)
        CTRL-W _	最大化(高度)
        CTRL-W >	扩大
        CTRL-W <	缩小
        CTRL-W |	最大化
        CTRL-W =	窗口等高等宽(恢复默认效果)
        :q			退出
        CTRL-W [jkhl]	鼠标转窗口
        resize N 指定窗口高度,可以用于最小化窗口:resize 1
        vertical resize N 指定窗口宽度
    
    

    :Te  Tab页浏览目录,全称是 :Texplorer
    gt  – 到下一个页
    gT  - 到前一个页
    {i}gt  – i是数字,到指定页,比如:5gt 就是到第5页
    :tabs   打开的窗口和Tab的情况
    vim -p cool.cpp shell.cpp haoel.cpp 用Tab页的方式打开多个文件

    :mksession ~/.mysession.vim 保存会话
    :mksession! ~/.mysession.vim    同名覆盖,强制保存
    vim -S ~/.mysession.vim

    :cw - Quickfix
    :cp 跳到上一个错误
    :cn 跳到下一个错误
    :cl 列出所有错误
    :cc 显示错误详细信息

    :grep -r –include=”*.[ch]“ NGX_HTTP_VAR_INDEXED src/

字符相关

    guu – 把一行的文字变成全小写。或是【Vu】
    gUU – 把一行的文件变成全大写。或是【VU】
    v  - 键进入选择模式,然后移动光标选择你要的文本,按【u】转小写,按【U】转大写
    ga –  查看光标处字符的ascii码
    g8 – 查看光标处字符的utf-8编码
    gf - 打开光标处所指的文件 (这个命令在打到#include头文件时挺好用的,当然,仅限于有路径的)
    * 或# 在当前文件中搜索当前光标的单词

缩进相关

    >> 向右给它进当前行 【<<】向左缩进当前行
    =  - 缩进当前行 (和上面不一样的是,它会对齐缩进)
    =% – 把光标位置移到语句块的括号上,然后按=%,缩进整个语句块(%是括号匹配)
    G=gg 或是 【gg=G】  - 缩进整个文件(G是到文件结尾,gg是到文件开头)

复制粘贴相关

    v - 键进入选择模式,然后按h,j,k,l移动光标,选择文本,然后按 【y】 进行复制,按 【p】 进行粘贴。
    dd 剪切一行(前面加个数字可以剪切n行),【p】粘贴
    yy 复制一行(前面加个数字可以复制n行),【p】粘贴

光标移动相关

    Ctrl + O  向后回退你的光标移动
    Ctrl + I  向前追赶你的光标移动
    这两个快捷键很有用,可以在Tab页和Windows中向前和向后trace你的光标键,这也方便你跳转光标。

读取Shell命令相关

    :r!date  插入日期
    上面这个命令,:r 是:read的缩写,!是表明要运行一个shell命令,意思是我要把shell命令的输出读到vim里来。

### 进行编辑的七种习惯

http://wenku.baidu.com/view/2bde7e21dd36a32d73758167.html

/pattern	正则查找定位
*	在全文中查找光标所在的词
%	从开始括号定位到对应关闭括号,对应项跳转
[{	跳到代码段的起始{处
i	30i-Esc 插入,插入30个-字符,Esc键标记i命令的结束
gb	跳到变量的局部声明处
ctags ctrl-]	使用ctags
:s	使用sed进行较多文本的替换操作
* + cw	先*查找,然后使用cw命令替换,替换少量文本
ctrl-N	自动补全
宏	qa命令在a寄存器中录制宏,正常编辑,q退出宏录制并保存,使用@a重放宏。
:abbr	设定替换?确保修正?例如::abbr linuxx Linux	设定后,在编辑时会自动修正。

:grep	命令对一组文件进行模式搜索,vim把搜索结果做成一个列表,然后跳到第一个结果,使用:cn命令跳到下一个结果。
        如果你想改变一个函数的参数个数,这个功能很有用。
[I:		把光标移到函数名下,然后敲[I: vim就会显示一个头文件中该函数名的所有匹配。
多窗口编辑	split  vsplit  tage 等命令
预览窗口preview-tag	可以打开一个特殊的窗口,光标还停留在你的编辑窗口,预览窗口可以是光标所指向函数的定义

选择一段文字,然后使用!sort,这可以调用外部的sort命令对它们进行排序。

vim提供:make命令用于编译,并把你带到错误处。

只要记住最常用的命令,用熟就可以了。


[Vim中的正则](http://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html),很强大!

secureCRT颜色设置
options->session options->emulation->terminal选择linux(相应的服务器系统)ansi color 打上狗狗
options->global option ->appearance->ANSI COLOR->bold color ->里面的8种色彩就是服务器里文件相应的颜色,想改那只颜色点击就行了,比如目录的颜色是蓝色的,偶不想要蓝色,就点击蓝色,自己选择一种色彩,添加到自定义颜色 

路径
~/.vimrc	配置文件
~/.vim/plugin
~/.vim/doc
~/.vim/syntax
~/.vim/syntax/c.vim
====================================================================================================
统一格式,修改~/.vimrc

该文件的一些配置

set helplang=cn
set encoding=utf-8
syntax enable
syntax on

colorscheme desert

注释使用"

开关

设置显示行号
显示行号    :set number     或 :set nu
去除行号    :set nonumber  或  :set nonu 

兼容模式,兼容旧版的插件
set compatible
set nocompatible

打开语法高亮。
syntax enable on

设置自动缩进
set autoindent

设置制表符tab为8
set tabstop=8
设置统一缩进为8
set softtabstop=8
set shiftwidth=8

展开tab为空格
set et
set noet

设置增量和高亮搜索(编程很有用的)
set incsearch
set hlsearch
取消高亮搜索
set nohlsearch

搜索的时候不区分大小写
set ic
区分大小写
set noic

高亮当前行
set cursorline
这样光标当前行会有一个下划线
取消高亮当前行
set nocursorline

防止折行显示(把一行的最后一个单词折成两个部分显示在两行)
set linebreak

====================================================================================================
操作
:e d:\test.txt	打开文件test.txt
    :e!	重新载入本文件
:!	执行命令
:s	应用sed
:w
:q
:%!xxd	vi打开文件的模式就转变成二进制的模式了
:f	或者CTRL+G 显示当前打开的文件名
====================================================================================================
编辑
详细参考	http://vimcdoc.sourceforge.net/doc/visual.html

跳转 -- 扩展

h j k l	光标移动
y	拷贝
    yy	拷贝行	
    nyy	
    :n1,n2y	命令行模式下,复制从行标n1开始n2结束所有行内容
    yw	复制一个单词
d	删除
    dd	删除行
    ndd
    :n1,n2d	命令行模式下,删除从行标n1开始n2结束的所有行内容
D	删除所选中部分所在的行
x	删除
r	替换
p	粘贴在光标后
P	粘贴在光标前
m	标记书签	mx	设置书签,x只能是a-z的26个字母 
`	跳转到书签	`x	跳转到书签处("`"是1左边的键)
i	插入
I	在每一行所选中内容的开始前添加”字符串”改变文本 
u	回退,撤销前一个操作
.	重复上一个编辑操作	无效?
Ctrl+R	还原被撤消的编辑操作。
a
f F t T	在当前行查找字符,查找后命令[;]可以继续查找
A	会在选中的块后面添加文本。它们是对齐的。 如果要在选中的块紧接每行末尾添加内容,则需用$来指定选择到行尾,而不是简单地用光标。
c	删除所选中的部分并切换到输入模式。 
C	删除所选中的部分所在的行并切换到输入模式。 
J	合并行	当选中想合并在一起的行以后,按下 J(大写)就可以了。 
v	进入可视模式,以字符为单位选择。v,然后移动光标,就可以看到选择的块,再次按v,结束选择,被选的块放入了寄存器中,可以用p粘贴到你想要的地方。
V	进入可视模式,以行为单位选择。从按下V的那行起,一直到光标所移动到的行之间的所有行都被选中。
CTRL+V	块编辑,选择方框,再次按CTRL+V完成选择。块级别选择。
K	查看关键字的man page,以选中的文本为关键字
>	增加缩进,"x>"表示增加以下x行的缩进 
<	减少缩进,"x<"表示减少以下x行的缩进 
=	自动排列所选中的内容
~	交换大小写(a   ->   A,   A   ->   a) 
U	将小写变大写(a   ->   A,   A   ->   A) 
u	将大写变小写(a   ->   a,   A   ->   a) 
esc	退出对应命令模式
*	在一个word上使用*,查找此word
其它
    :n1con2	将行标n1的内容复制到行标n2的下面。
    :n1,n2con3	将行标n1和n2之间的内容复制到行标n3下面。
    :r 文件名	将文件所有内容复制到当前文件,插入到光标所在行下面。

CTRL+v 进入列块编辑
上下选中所要编辑行
大写I 进入插入模式
敲上在所编辑行前面要加的字符(这是会变成普通插入编辑方式)
Esc
(这里可能会有1-2秒的延迟)
五步做完后就在所有选中行前加上了相同的内容,很方便哦

查找
/string  向前搜索指定字符串
?string  向后搜索指定字符串
n           搜索指定字符串的下一个出现位置
N          搜索指定字符串的上一个出现位置

tabnew.	在当前目录打开
tabp	前翻页
tabn	后翻页
2gt


错误窗口 quickfix
:cw	打开
:cn
:cp
====================================================================================================
技巧
:g/^\s*$/d	删除所有空白行(^是行的开始,\s*是零个或者多个空白字符;$是行尾)
====================================================================================================
多次重复一组编辑操作。 
那就是Vim为什么要引入命令记录的原因.   使用命令记录分三个步骤 
1.  使用 "qa "命令开始,   后续的动作将被记录进名为a的寄存器中.   给出的寄存器名字必需是a到z之间的一个字母 
2   执行你要执行的操作 
3.  按下q以结束对命令的记录(注意仅仅是q一个字符,   不要键入多余的字符). 
现在你可以通过 "@a"命令来执行刚刚记录下来的记录宏 
示例:
qa   开始将后续的命令记入寄存器a 
^   将光标移动到行首 
i\#include   " <Esc>   在该行之前插入#include   " 
$   移动到行尾 
a " <Esc>   在行尾加上 "字符 
j   移到下一行 
q   停止记录 
现在你已经将对第一行的操作完成了一遍,   对其它三行只需要执 
行3次 "@ "命令 "@a "命令也可以加一个数字前辍1,   这会使该记录被回放由 
该数字指定的次数.   在上面的例子中是: 
normal   mode   command 
3@a


## vundle 插件管理

<http://hahaya.github.io/2013/07/26/use-vundle.html>

### 安装

    git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

BundleInstall
PluginInstall

====================================================================================================
多个标签,每个标签一个文件
help tabe
tabn 下一个标签
====================================================================================================
help vsplit 打开多个窗口

====================================================================================================
标签

ctags通常系统默认安装,产生tags文件
ctags -R	对当前目录下所有源文件生成tags

vim中
:set tags=/home/wooin/vim71/tags

ctrl-], 光标会自动跳到setmouse()函数的定义处
ctrl-T, 这样又跳回
====================================================================================================
对齐
下载:http://www.vim.org/scripts/download_script.php?src_id=10110
安装:
vim Align.vba.gz 
:so % 
:q

使用
v 进入选择模式,选择要对齐的代码行,再快速按
\t=  : align assignments (don't count logic, like == or !=) 
\t,  : align on commas 
\t|  : align on vertical bars (|) 
\tsp : align on whitespace 
\tt  : align LaTeX tabular tables 

:help align
====================================================================================================
插件: TagList

首先请先在你的~/.vimrc文件中添加下面两句:
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

此时用vim打开一个c源文件试试:
$ vim ~/vim/src/main.c

进入vim后用下面的命令打开taglist窗口,
:Tlist 
====================================================================================================
文件浏览器和窗口管理器 -- 插件: WinManager
====================================================================================================
s 字符串替换

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

====================================================================================================
格式化文件
粘贴到vim的代码,尤其是从WEB粘贴过来的代码,经常是一片混乱,看起来向右不断缩进造成的。
解决的办法是:
粘贴完毕使用命令:
gg=G

gg - 到文件开始处
= - 应用缩进
G - 直到文件尾

== 格式化当前行	  
====================================================================================================
处理粘贴时的缩进,也可以
命令,
set paste使得vim进入粘贴模式,则粘贴过来的内容能够保持原来的格式
set nopaste 关闭,默认
或者在vimrc中配置用F3来切换
"Paste toggle - when pasting something in, don't indent.
set pastetoggle=<F3>
====================================================================================================
文件编码

查询
:set fenc?


====================================================================================================
代码补全

ctrl+x, ctrl+o, ctrl+n, ctrl+p
====================================================================================================
drwxrwsr-x         7   dijk           team                   4096     4月     8   19:34   qingli 
a)   这里的   s   属性有何作用?         
set-uid位。当程序执行的时候,会改变执行权限,既设置了set-uid位后程序的执行权限变为文件所有者权限。 
b)   属性字段后的数字   7   表示什么? 
子目录的个数   包含.   ..目录。

====================================================================================================
vim -b	以二进制方式打开文件
:%!xxd -g 1  切换成十六进制的一个字节的模式






vimdiff
=======
    ]c 跳到下一个不同的地方
    [c 跳到上一个不同的地方
    dp 将当前窗口光标位置处的内容复制到另一窗口
    do 将另一窗口光标位置处的内容复制到当前窗口
    zo 打开折叠
    zc 关闭折叠



-->

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

💰

×

Help us with donation