Vim常用命令和配置

[TOC]

Vim常用命令和配置

Mac 终端键入 vimtutor 即可进入Vim入门教程

问题收集

vim代码粘贴,格式混乱到逆天.

这是因为vim设置了自动缩进造成的问题,
所以如果你需要在insert模式下粘贴代码的话,那么先执行
取消自动缩进
:set paste

自己敲代码的时候,打开自动缩进
:set nopaste

这样代码又可以自动缩进了. 
当然你可以在~/.vimrc中设置键盘映射来做切换缩进开关
:set pastetoggle=<F10>

我的Mac中用的vim的配置信息

set paste
set encoding=utf-8
set fileencodings=gb2312,utf-8
set fileencoding=utf-8
set termencoding=utf-8
set nu
set ts=4
set confirm
syntax on
set showmatch
set shiftwidth=4
set ai
set ruler
set helplang=cn
set hlsearch
set cursorline
set laststatus=2
set flash
set autoindent
set smartindent
set hls
set hlsearch
set lbr
set nowrap
set nows
colorscheme elflord
set cc=120
filetype plugin on
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

自带配色与主题

语法格式:
highlight 配置目标 配置项=颜色参数

配置目标
VertSplit	垂直分割窗口的边框
LineNr	行号
Cursor	光标所在字符
CursorLine	光标所在行
ColorColumn	光标所在列
ColorColumn	标尺
NonText	窗口尾部的~和@,以及文本里实际不显示的字符
StatusLine	状态栏
StatusLineNC	非当前窗口的状态栏
Error	错误
ErrorMsg	错误信息
WarningMsg	警告信息
ModeMsg	当前模式
MoreMsg	其他文本
Question	询问用户
IncSearch	增量搜索时匹配的文本符串
Search	匹配的文本串
Pmenu	弹出菜单
PmenuSel	菜单当前选择项
DiffAdd	diff模式增加的行
DiffChange	diff模式改变的行
DiffDelete	diff模式删除的行
DiffText	diff模式插入文本

配置项
term	黑白终端的属性
cterm	彩色终端的属性
ctermfg	彩色终端前景色
ctermbg	彩色终端背景色
gui	    GUI属性
guifg	GUI前景色
guibg	GUI背景色

颜色参数
NONE    默认,代表没有颜色
Black
DarkBlue
DarkGreen
DarkCyan
DarkRed
DarkMagenta
Brown, DarkYellow
LightGray, LightGrey, Gray, Grey
DarkGray, DarkGrey
Blue, LightBlue
Green, LightGreen
Cyan, LightCyan
Red, LightRed
Magenta, LightMagenta
Yellow, LightYellow
White


:highlight                      查看vim默认支持的各种配色方案
:highlight Normal guibg=Black   设置背景色为黑色
:highlight LineNr guifg=red     修改行号字体色
:highlight LineNr guibg=white   修改行号的背景色
highlight 还有很多命令就写了太麻烦了,不如直接用colorscheme选择主题.

:colorscheme elflord            深色主题,推荐,透明时不影响显示
:colorscheme blue               蓝色背景黄字,部分字白色高亮
:colorscheme darkblue           黑蓝背景白字,部分字紫色高亮
:colorscheme default            白色背景黑字,部分字紫色高亮
:colorscheme delek              白色背景黑字,部分字粉红色高亮
:colorscheme desert             黑色背景,白色字,部分字粉色高亮
:colorscheme evening            黑色背景,白色字,部分字粉色高亮
:colorscheme industry           淡色主题, 推荐,透明时不影响显示
:colorscheme koehler
:colorscheme morning
:colorscheme murphy
:colorscheme pablo
:colorscheme peachpuff
:colorscheme ron
:colorscheme shine
:colorscheme slate
:colorscheme torte
:colorscheme zellner

常用配置

大部分命令放在~/.vimrc就是vim的默认配置文件
或者全局修改vim /etc/vim/vimrc.local 
在vim的:下运行就是临时设置
:set paste                      保留粘贴的格式,防止粘贴的时候乱序
:set ic                         在查询及模式匹配时忽赂大小写
:set flash                     	在出错处闪烁但不呜叫(缺省)
:set fileencoding           	查看当前编码格式
:set fileencoding=gb2312		设置编码
:set fileencoding=gb2312,utf-8	直接进行转换文件编码
:set fileencodings=utf-8,gb2312 打开文件的格式
:set encoding=utf-8         	Vim 的内部编码
:set termencoding=utf-8     	Vim 在与屏幕/键盘交互时使用的编码(取决于实际的终端的设定)
:set nobomb                 	去掉utf-8 BOM
:set bomb                   	保留utf-8 BOM
:set tabstop/ts=4              	第一行设置tab缩进4个空格
:set shiftwidth=4           	第二行设置当行之间交错时使用4个空格
:set autowrite	                自动保存
:set autoindent                 自动缩进
:set smartindent                开启新行时使用智能自动缩进
:syntax on                  	语法高亮
:set showmatch              	显示括号配对,当键入“]”“)”时,高亮度显示匹配的括号
:set ai                     	自动对齐
:set shiftwidth=4           	设定 << 和 >> 命令移动时的宽度为 4
:set history=1000           	记录历史的行数
:set autoindent             	使用自动对起,也就是把当前行的对起格式应用到下一行
:set smartindent            	依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
:set ruler                  	在右下角显示光标位置的状态行
:set nobackup               	不备份
:set helplang=cn            	设置中文帮助信息
:set nowrap                 	设置代码不准换行
:set wrap                   	设置代码换行
: n                         	跳转到第N行
:set hls				        寻找匹配是高亮度显示的
:set hlsearch               	搜索高亮
:set incsearch               	输入搜索内容时就显示搜索结果
:set cursorline                 显示当前行的下划线
set cursorcolumn/cuc            显示当前列的划线
set nocursorcolumn/nocuc        取消显示当前列的下划线
:set laststatus=2           	总是显示行状态
:set omnifunc=phpcomplete   	PHP代码补全,在书写一些php函数的时候,按下ctrl+x ,接着按下ctrl+o 
set ruler               打开状态栏标尺
set background=dark     背景使用黑色
set noignorecase       	默认区分大小写
colorscheme evening 	设定背景为夜间模式
set wrap/nowrap        	长行显示自动折行
set lbr 				不在单词中间断行
set warn/nowarn        	对文本进行了新的修改后,离开shell时系统给出显示(缺省)
set ws/nows             在搜索时如到达文件尾则绕回文件头继续搜索
set wrap/nowrap        	长行显示自动折行
colorscheme elflord 设置主题色为elflord主体
set cc=120              设置代码边界线(也叫参考线)为120列

filetype plugin on      当plugin状态为"ON"时,那么就会在Vim的运行时环境目录下加载该类型相关的插件。比如为了让Vim更好的支持Html编程,就需要下载一些Html相关的插件。vim中执行 :filetype plugin on
 filetype---- 文件类型检测

vim中执行:filetype查看Vim的文件类型检测功能是否已打开;:set filetype查看当前文件是什么类型;:set filetype=HTML设置文件类型为HTML;

filetype的默认属性:detection:ON plugin:OFF indent:OFF

detection:默认情况vim会对文件自动检测文件类型,也就是你看到的'detection:ON',如需关闭:filetype off。还有一种方式就是在文件内容中指定,Vim会从文件的头几行自动扫描文件是否有声明文件类型的代码,如在文件的首行加入 //vim: filetype=HTML,当作注释写入,以致于不影响文件的编译,这样Vim不通过文件名也能检测出文件是什么类型

plugin:当plugin状态为"ON"时,那么就会在Vim的运行时环境目录下加载该类型相关的插件。比如为了让Vim更好的支持Html编程,就需要下载一些Html相关的插件。vim中执行 :filetype plugin on

indent:不同类型文件有不同的方式,比如Python要求使用4个空格作为缩进,而Html使用2个空格作为缩进,那么indent就可以为不同文件类型选择合适的缩进方式。你可以在Vim的安装目录的indent目录下看到定义了很多缩进相关的脚本。vim中执行 :filetype indent on。 

以上三个参数,可以写成一行filetype plugin indent on在_vimrc文件中写入。



自动补全命令

# 帮助命令
:help compl-generic
:help 'complete'
:help ins-completion

# 组合键,比较繁琐, 如果嫌烦的话可以使用inoremap在.vimrc中设置键盘绑定
# 在使用文件名补全的时候,每按CTRL-X CTRL-F会把当前目录下的所有文件列出来
# 再来一遍CTRL-X CTRL-F会追加显示选中的目录下面的子目录
# 默认选中第一个,从上到下,切换,按CTRL-F进行切换选择,
# 其他类型补全时,上下切换的时候也是按第二个组合件
# 调用补全列表后也可使用CTRL-N CTRL-P进行上下切换
整行补全                        CTRL-X CTRL-L
根据当前文件里关键字补全        CTRL-X CTRL-N
根据字典补全                    CTRL-X CTRL-K
根据同义词字典补全              CTRL-X CTRL-T
根据头文件内关键字补全          CTRL-X CTRL-I
根据标签补全                    CTRL-X CTRL-]
补全文件名                      CTRL-X CTRL-F
补全宏定义                      CTRL-X CTRL-D
补全vim命令                     CTRL-X CTRL-V
用户自定义补全方式              CTRL-X CTRL-U
拼写建议                        CTRL-X CTRL-S 
调出补全列表后上下切换          CTRL-P CTRL-N
全能补全(Omni)                CTRL-X CTRL-O
也是全能补全的自动补全和上一个有什么区别忘了   CTRL-X CTRL-P
基于搜索当前文件全文的自动补全  CTRL-P

常用跳转命令

ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处

( (左小括号) 移到这个句子的开头
) (右小括号) 移到下一个句子的开头

% 跳转到相配对的括号  
gD 跳转到局部变量的定义处  
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"  
mx 设置书签,x只能是a-z的26个字母  
`x 跳转到书签处("`"是1左边的键)  
> 增加缩进,"x>"表示增加以下x行的缩进  
< 减少缩进,"x<"表示减少以下x行的缩进  
  
{ 跳到上一段的开头  
} 跳到下一段的的开头  
( 移到这个句子的开头  
) 移到下一个句子的开头  
  
[[ 跳转至上一个函数(要求代码块中'{'必须单独占一行)  
]] 跳转至下一个函数(要求代码块中'{'必须单独占一行)  
  
C-] 跳转至函数或变量定义处  
C-O 返回跳转前位置   
C-T 同上   
nC-T 返回跳转 n 次  
  
0 数字0,跳转至行首   
^ 跳转至行第一个非空字符   
$ 跳转至行尾  

分屏

:qa         关闭当前所有的窗口

在vim中开启新窗口打开指定文件进行对比
:diffupdate 如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用该命令
:vert diffsplit file2   新打开一个文件和当前文件, 垂直分屏,同步滚动相互影响
:diffsplit file2        新打开一个文件和当前文件, 水平分屏,同步桂东相互影响
:split file2 打开一个新的文件,水平分屏,不会同步滚动
:vsplit file2    打开一个新的文件,垂直分屏,不会同步滚动

新建文件分屏,文件对比
vim -on file1 file2...	水平分屏 =vim -o
vim -On file1 file2...	垂直分屏 = vim -O
vim -o  文件1 文件2... 上下两排显示两个文件,但是不会同步滚动和相互影响
vim -O  文件1 文件2... 左右两排显示两个文件,但是不会同步滚动和相互影响
vim -d  文件1 文件2... 左右两排同步显示互相影响两个文件,对一个文件操作也会影响到另一个文件
vimdiff file1 file2 = vim -d file1 file2

分屏
Ctrl + w s 上下分屏
Ctrl + w v 左右分屏
:sp filename 上下水平分屏,且打开一个新的文件
:vsp filename 左右垂直分屏,且打开一个新的文件

关闭分屏
Ctrl + w  c 关闭当前窗口(如果是最后一个,无法关闭)
Ctrl + w q 关闭当前窗口(如果是最后一个,则退出vim)

切换分屏
Ctrl + w l 右边
Ctrl + w h 左边
Ctrl + w j 上边
Ctrl + w k 下边

上下分屏生效
Ctrl + w = 所有屏一样高度
Ctrl + w + 增加高度
Ctrl + w - 减少高度

定位到不同点:
[c     跳到前一个不同点这里的[就是中括号键
]c     跳到后一个不同点这里的]就是中括号键

在窗口间跳转:
ctrl-w w    跳到下一个窗口
ctrl-w h    跳到左侧窗口
ctrl-w l    跳到右侧窗口
ctrl-w j    跳到下方的窗口
ctrl-w k    跳到上方的窗口

合并文档:
dp          将差异点的当前文档内容应用到另一文档(diff put)
do          将差异点的另一文档的内容拷贝到当前文档(diff get)

对比文件差异时,可以做到上下文的展开和查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置:
:set diffopt=context:3

可以用简单的折叠命令来临时展开被折叠的相同的文本行:
zo          (folding open, z这个字母看上去比较像折叠的纸)

然后可以用下列命令来重新折叠:
zc          (folding close)

替换命令

替换命令的格式  :[range]s/from/to/[flags]
       不写range      默认为光标所在的行。
        .             光标所在的行。
        1             第一行。
        2             第2行。
        $             最后一行。
        'a            标记a所在的行(之前要使用ma做过标记)。
        .+1           当前光标所在行的下面一行。
        $-1           倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。
        22,33         第22~33行。
        1,$           第1行 到 最后一行。
        1,.           第1行 到 当前行。
        .,$           当前行 到 最后一行。
        'a,'b         标记a所在的行 到 标记b所在的行。
        %             所有行(与 1,$ 等价)。
        ?chapter?     从当前位置向上搜索,找到的第一个chapter所在的行。其中chapter可以是任何字符串或者正则表达式。
        /chapter/     从当前位置向下搜索,找到的第一个chapter所在的行。其中chapter可以是任何字符串或者正则表达式。
        
        注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏
        移量。
        
        这里可用的flags有:
        无       只对指定范围内的第一个匹配项进行替换。
        g        对指定范围内的所有匹配项进行替换。
        c        在替换前请求用户确认。
        e        忽略执行过程中的错误。
        
        注意:上面的所有flags都可以组合起来使用,比如 gc 表示对指定范围内的
        所有匹配项进行替换,并且在每一次替换之前都会请用户确认。


如:“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“.,$” :从当前行到文件尾;

:s/搜索内容/替换内容/           替换当前行
:s/搜索内容/替换内容/g          替换当前行所有内容
:5,15s/搜索内容/替换内容/g      指定只在第5至第15行间进行替换:
:.,$s/搜索内容/替换内容/g       指定只在当前行至文件结尾间进行替换
:n,$s/搜索内容/替换内容/        替换第 n 行开始到最后一行中每一行的第一个
:n,$s/搜索内容/替换内容/g       替换第 n 行开始到最后一行中每一行所有
:.,.+8s/搜索内容/替换内容/g     命令指定只在后续9行内进行替换
n为数字,若 n 为 . 时表示从当前行开始到最后一行 

:%s/搜索内容/替换内容/(等同于 :g/搜索内容/s//替换内容/) 替换每一行的第一个
:%s/搜索内容/替换内容/g(等同于 :g/搜索内容/s//替换内容/g) 替换每一行中所有
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 


:s#搜索/#替换/# 替换当前行第一个 搜索/ 为 替换/ 
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / )

除此之外还可以将特定字符做为替换范围。
比如,将SQL语句从FROM至分号部分中的所有等号(=)替换为不等号(<>)
:/FROM/,/;/s/=/<>/g


也可以作为插入命令使用
:% s/^/#/g     在全部内容的行首添加#号注释
:2,50 s/^/#/g  在2~50行首添加#号注释
:2,50 s/^#//g  在2~50行首删除#号

每行的行首都添加一个字符串:%s/^/要插入的字符串
每行的行尾都添加一个字符串:%s/$/要插入的字符串


:s/old/new/g	查找old并替换为new,g代表整行匹配
:#, #s/old/new	#, #代表首尾行号
:%s/old/new/g	全文匹配替换
:%s/old/new/gc	全文匹配替换,并每次替换会弹出确认提示

光标

Ngg:跳转到第N行
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
*:读取光标处的字符串,并且移动光标到它再次出现的地方。

#:和上面的类似,但是是往反方向寻找。

ma:在当前光标的位置标记一个书签,名字为a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

`a:到书签a处。注意这个不是单引号,它一般位于大部分键盘的1的左边。

fx:移动光标到当前行的下一个x处。很明显,x可以是任意一个字母,而且你可以使用;来重复你的上一个f命令。

tx:和上面的命令类似,但是是移动到x的左边一个位置。(这真的很有用)

H:移动光标到屏幕上面

M:移动光标到屏幕中间

L:移动光标到屏幕下面

gg:到文件首

G:到文件尾

Fx:和fx类似,不过是往回找。

w/e:光标往后移动一个词。可以用nw/ne光标向后移动n个单词

nw: n可为数字,表示向右移动两个单词

b:光标往前移动一个词。可以用nb光标向前移动n个单词

0: 移动光标到当前行首。

^:移动光标到当前行的第一个字母位置。

$: 移动光标到行尾。

): 移动光标到下一个句子。

(: 移动光标到上一个句子。

ctrl+[+i    跳转到函数、变量和#define

ctrl+[+d    跳转到#define处

ctrl+i      向前跳到前几次光标位置

ctrl+o      向后跳到后几次光标位置

5CTRL-o     跳转到显示在位置0上面的位置5

5CTRL-I     跳转到显示在位置0下面的位置5


# 下面需要使用ctags进行方法追踪/代码追踪,可进行跨文件追踪
ctags 不存在则自动安装 
    centos  yum install ctags
    mac     brew install ctags
    ubumtu  apt-get install ctags

ctags 使用:
    
    使用前需要在源代码目录执行命令:
    ctags -R ./*
    使用ctags -R ./* 时如果项目文件中有js文件,可能会出现
      ctags: Warning: ignoring null tag in ………….js

      这种错误,据说是因为“js文件内有特殊结构,不在CTags默认定义列表中”,有两种方法:
        1、将项目中的js文件全部移出去,等生成那两个文件之后再移回来。
             对我来说,项目中js文件量太大,分部也不均匀,所以用的第二种方法。

       2、ctags可以指定生成.tags文件时,只过滤哪种语言的文件,下面的命令是只过滤php文件
             cmd切换到项目文件目录,执行:
             ctags --languages=php -R ./*

    -R表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。*表示所有文件。这条命令会在当前目录下产生一个“tags”文件,当用户在当前目录中运行vi时,会自动载入此tags文件。
    
    如果想把tags文件保存在其他位置可以使用 set tags=/finddir/tags指定tags 保存的位置
    
    set tags=tags;/ 注意这里有一个/这是告诉vim在当前目录找不到tags文件时请到上层目录查找。



Ctrl+]      跳转到当前光标下符号的定义处,和ta类似。

Ctrl+t      跳转到上一个符号定义处,和上面的配合基本上就能自由跳转了。

:ta x       跳转到符号x的定义处,如果有多个符号,直接跳转到第一处

:ts x       列出符号x的定义

:tj x       可以看做上面两个命令的合并,如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择。

快捷插入

r: 替换字符(单个)

R: 替换字符(多个)

cw: 替换文本直到单词末尾(ce也可)

c$: 替换文本直到行尾

s: 修改一个字符(与r的区别,修改后直接进入Insert模式)

i:在当前字符的左边插入

I:在当前行首插入

a:在当前字符的右边插入

A:在当前行尾插入

o:在当前行下面插入一个新行

O:在当前行上面插入一个新行

删除


dw: 删除单词 (de, d2w)

d$: 删除到行尾

D: 删除到行尾

S: 删除到行为,并进入Insert模式

x: 删除当前光标下的字符

dw: 删除光标之后的单词剩余部分。

d$: 删除光标之后的该行剩余部分。

dd: 剪切当前行。

c: 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc: 也是删除当前行,然后进入INSERT MODE

选中复制粘贴

v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用

一旦你高亮了选区,你或许想进行一些操作:

d:剪贴选择的内容到剪贴板。

y:拷贝选择的内容到剪贴板。

c:剪贴选择的内容到剪贴板并且进入插入模式。

dd:剪切当前行。

yy:拷贝当前行。

cc:剪切当前行并且进入插入模式。

D:剪切从光标位置到行尾到剪贴板。

Y:拷贝当前行。

C:和D类似,最后进入插入模式。

x:剪切当前字符到剪贴板。

s:和x类似,不过最后进入插入模式。

p:  粘贴

3j: 将会把光标向下移动三行。

10dd: 将会删除十行。

y3" 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。

p: 粘贴到光标之后

P: 粘贴到光标之前

u: 撤销

.: 重复上一次操作

:!: 执行外部命令(:!dir/:ls)

%: 查找配对的括号 ), }, ]

v:按字符选择。经常使用的模式,所以亲自尝试一下它。
V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
<C-V>:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。

dd:剪切当前行。
yy:拷贝当前行。
cc:剪切当前行并且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 类似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x类似,不过最后进入插入模式。

如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:
d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。

p: 粘贴



使用多重剪贴板
    VIM有很多粘贴板,粘贴板在VIM叫寄存器
    可以通过:reg命令查看当前粘贴板列表的情况.

使用格式
    "Ny 将选中内容复制到N号粘贴板(双引号必须按)
    "Np 将N号粘贴板内容粘贴出来(双引号必须按)

N的参数
    N一般都只是在用1-9,也可以是a-z A-Z,由用户指定
    ": ". "% "# 4个只读寄存器,分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名
    "* "+ "~ 存取GUI选择文本,用来和系统粘贴板交互
    "/ 最后搜索模式寄存器,缓存在vim中使用过的最后的搜索内容
    "_  不缓存操作内容(干净删除) 
     
将系统复制内容粘贴到vim
    先在外面复制完,在vim中用"+p(注意+号也要输入)
将Vim复制内容粘贴到系统
    在vim中按v选中,然后使用"+y(注意+号也要输入)

翻页操作

滚动一行:       ctrl-e ctrl-y
滚动翻半页:     ctrl-d ctlr-u
滚动整页翻页:   ctrl-f ctrl-b
M:移动光标到屏幕中间

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

跳转操作

%   按百分比来跳转,你想跳到文件的正中间,输入”50%“
gg  移动到文件的第一行
G   移动到文件的最后一行
nG  移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
0   移动到行首
^   移动到行首的第一个非空白字符。 
$   移动到行尾
f   移动到光标右边的指定字符之上.如: fx
F   命令反方向查找,也就是移动到光标左边的指定字符上。 
t   移动到光标右边的指定字符之前.
T   是”t“命令的反向版本,移动到光标右边的指定字符之后
;   命令重复前一次输入的f, t, F, T命令
,   ”,“命令会反方向重复前一次输入的f, t, F, T命令
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
%:在成对的括号等符号间移动
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。

*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。

/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面类似,但是是反方向。

):移动光标到下一个句子。
( :移动光标到上一个句子。

文件操作

:e + filename: 在当前窗口打开新的文件内容

:r + filename: 读取文件并插入到当前文件

:Explore 当前窗口下打开目录列表(点击文件后会以一个窗口两个文件同时显示的分屏形式展示)

:Vexplore 竖直分割窗口打开目录列表(点击文件后会以一个窗口两个文件同时显示的分屏形式展示)

:Sexplore 水平分割窗口打开目录列表(点击文件后会以一个窗口两个文件同时显示的分屏形式展示)

其他

shift+3 搜索当前光标下的单词,并将所有命中的单词背景设为黄色

shift+zz就是命令ZZ  退出VIM,如果文本已经经过编辑,则首先保存文件
”q/“和”q?“命令,在vim窗口最下面打开一个新的窗口,这个窗口会列出你的查找历史记录,你可以使用任何vim编辑命令对此窗口的内容进行编辑,然后再按回车,就会对光标所在的行的内容进行查找。

]p:和p的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下!

%:匹配花括号,方括号,括号等。在一个括号的上面,然后按%,鼠标就会出现在匹配的另外一半括号处。

>>:缩进所有选择的代码

<<:和上面类似,但是反缩进

gd:到达光标所在处函数或者变量的定义处。

K:在Man里面查找光标当前所在处的词。

u: 撤销操作

ctrol+r 反撤销

:!command   调用系统SHELL命令
如:!ls -lha   :!pwd

shift+v: 选中光标所在行

shift+g: 全选

==: 对当前行进行自动缩进

n==: 对以下n行进行缩进

选中一部分代码按=: 对选中部分进行自动缩进

:set ft=php 然后按 gg=G 格式化代码

转载于:https://my.oschina.net/chinaliuhan/blog/3064891

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值