一天一点学习Linux之vi/vim的使用

vi与vim

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。
vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;
因为程序简单,编辑速度相当快速。
vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。
vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。
vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。

 

 

为何要学 vi

 

所有的Unix Like系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在;
一些软件的编辑接口会主动调用vi (例如 crontab, visudo, edquota 等命令);

vi的使用

 

基本上vi可以分为三种状态,分别是一般模式、编辑模式和命令行模式,各模式的功能区分如下:

一般模式:

 

以vi打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用上下左右按键来移动光标,你可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。

编辑模式:

 

在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下【i, I, o, O, a, A, r, R】等任何一个字母之后才会进入编辑模式。这时候屏幕的左下方会出现【INSERT或 REPLACE】的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下【Esc】即可退出编辑模式。

命令行模式:

 

输入【 : / ? 】三个中的任何一个,就可以将光标移动到最底下那一行。在这个模式中, 可以提供查找、读取、存盘、替换字符、离开vi、显示行号等的动作则是在此模式中完成的!

 

一般模式可用的按钮说明

移动光标
【h、j、k、l】,分别控制光标左、下、上、右移一格
按【ctrl+b】屏幕往”后”移动一页
按【ctrl+f】屏幕往”前”移动一页

【n<space>】光标向右移动n个字符
【Home】移动到这一行的最前面字符处:0数字,但不能用数字小键盘上的数字
【End】 移动到这一行的最后面字符处:$,我测试好像不行
【w】光标跳到下个字的开头
【e】光标跳到下个字的字尾

【H】 光标移动到这个屏幕的最上方那一行的第一个字符
【M】 光标移动到这个屏幕的中间那一行的第一个字符
【L】光标移动到这个屏幕的最下方那一行的第一个字符

【G】 移动到这个文件的最后一行
【nG】移动到这个文件的第n行(可配合:set nu)
【gg】 移动到这个文件的第一行,相当于1G
【n<Enter>】光标向下移动n行

查找与替换
【/word】 向光标向下寻找一个名称为word的字符串
【?word】 向光标向上寻找一个名称为word的字符串
【n】 代表重复前一个查找的动作
【N】 与n刚好相反,为【反向】进行行前一个查找动作

【:n1,n2s/word1/word2/g】  n1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2

【:1,$s/word1/word2/g】 从第一行到最后一行查找word1字符串,并将该字符串替换为word2
【:1,$s/word1/word2/gc】 从第一行到最后一行查找word1字符串,并将该字符串替换为word2 ,且在替换前提示用户确认是否进行替换

删除、复制与粘贴

【x】 为向后删除一个字符 (相当于【del】键)
【X】 为向前删除一个字符(相当于【backspace】键)
【nx】 连续向后删除n个字符

【dd】 删除光标所在行
【ndd】 删除光标所在的向下n行
【d1G】 删除光标所在行到第一行的所有数据
【dG】 删除光标所在到最后一行的所有数据

【d$】 删除光标所在处,到该行的最后一个字符
【d0】 删除光标所在处,到该行的最前一个字符

【yy】 复制光标所在的那一行
【nyy】 复制光标所在的向下n列

【y1G】 复制光标所在行到第一行的所有数据
【yG】 复制光标所在行到最后一行的所有数据

【y0】 复制光标所在的那个字符到该行行首的所有数据
【y$】 复制光标所在的那个字符到该行行尾的所有数据

【p】将已复制的数据在光标下一行粘贴上
【P】 则为贴在光标的上一行

【u】 恢复前一个操作
【Ctrl+r】重做上一个操作

【.】 是重复前一个操作

一般模式切换到编辑模式的可用的按钮说明

【i, I】 进入编辑模式:
i 为【从目前光标所在处插入】
I 为【在目前所在行的第一个非空格符处开始插入】

【a, A】 进入编辑模式(Insert mode):
a 为【从目前光标所在的下一个字符处开始插入】
A 为【从光标所在行的最后一个字符处开始插入】

【o, O】 进入编辑模式:
o 为【在目前光标所在的下一行处插入新的一行】
O 为在目前光标所在处的上一行插入新的一行

【r, R】 进入取代模式:
r 只会取代光标所在的那一个字符一次
R会一直取代光标所在的文字,直到按下 ESC 为止;

【Esc】 退出编辑模式,回到一般模式

一般模式切换到命令行模式可用的按钮说明

【:w】 保存编辑的内容
【:w!】强制写入该文件,但跟你对该文件的权限有关
【:q】 离开vi
【:q!】 不想保存修改强制离开
【:wq】 保存后离开
【:x】 保存后离开
【ZZ】 若文件没有更动,则不保存离开,若文件已经被更改过,则保存后离开

【:w filename】 将编辑的数据保存成另一个文件(类似另存)
【:r filename】 在编辑的数据中,读入另一个文件的数据。即将【filename】 这个文件的内容加到光标所在行后面。

【:n1,n2 w filename】 将n1到n2的内容保存成filename这个文件。
【:! command】暂时离开vi 到命令行模式下执行command的显示结果!例如 【:! ls /home】即可在 vi 当中察看/home底下以ls输出的文件信息!

【:set nu】 显示行号
【:set nonu】 与 set nu 相反,为取消行

vim的缓存文件、恢复与开启时的警告信息

我们知道一些常用的编辑软件,都有个恢复的功能,就是说当你的系统因为某些原因而导致类似当机的情况时,还可以利用这个恢复功能将之前未保存的数据找回来。我们的VIM也有这个功能。

当我们在使用vim编辑时,vim会在与被编辑的文件的目录下,再建立一个名为 .filename.swp的文件。如果你的系统因为某些原因断线了, 导致你编辑的文件还没有保存,这个时候 .filenam.swp 就能够发会救援的功能了。

我们来演示一下
vim man.config
ctrl+z放到后台执行
我们停止VI的进程
一种方法
ps aux |grep vi
kill -9 n

另外一种方法
jobs
kill -9 %1

我们用ls -l 命令来查看一下目录里面,会发现有个.man.config.swp的文件,这个文件就是个缓存的文件

我们再来编辑
vim man.config
这时候会出现一些信息
问题一:可能有其他人或程序同时在编辑这个文件:
问题二:在前一个vim的环境中,可能因为某些不知名原因导致vim中断 (crashed):

右下角会出现六个命令项,其作用说明如下:
(O)pen Read-Only:打开此文件成为只读档, 可以用在你只是想要查阅该文件内容并不想要进行编辑行为时。一般来说,在上课时,如果你是登入到同学的计算机去看他的配置文件, 结果发现其实同学他自己也在编辑时,可以使用这个模式;
(E)dit anyway:还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容。如果说两个人都在编辑这个文件的话,很容易出现互相改变对方的文件等问题。
(R)ecover:就是加载暂存盘的内容,用在你要救回之前未保存的工作。 不过当你救回来并且储存离开vim后,还是要手动自行删除那个暂存档。
(D)elete it:你确定那个暂存档是无用的!那么开启文件前会先将这个暂存盘删除
(Q)uit:按下 q 就离开vim,不会进行任何动作回到命令提示字符。
(A)bort:忽略这个编辑行为,感觉上与 quit 非常类似!

 

vim的功能

 

其实,目前大部分的Linux发行版本都以vim取代了vi。为什么要用vim呢?因为vim具有颜色显示的功能,并且还支持许多的程序语法(syntax)和相应的提示信息。查看自己的VI是不是被VIM代替,可以用
alias这个命令来查看是不是有alias vi=’vim’这一行。

块选择

 

【v】字符选择,会将光标经过的地方反白选择
【V】 行选择,会将光标经过的行反白选择
【Ctrl+v】 块选择,可以用长方形的方式选择资料 (提制竖列)
【y】 将反白的地方复制
【d】 将反白的地方删除

多文件编辑

 

大家在使用vim的时候,可能会碰到你需要复制一个文件中的某段到另外一个文件中,而vim不能够在关闭的时候,把这段保留住。或者是用其它的方法复制。
【vim file1 file2】

【:n】编辑下一个文件
【:N】编辑上一个文件
【:files】列出目前这个vim编辑的所有文件

 

多窗口功能

 

有两个需要对照着看的文件
【:sp filename】开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。

【ctrl+w+j】
【ctrl+w+↓】按键的按法是:先按下 【ctrl】 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。

【ctrl+w+k】
【ctrl+w+↑】同上,不过光标移动到上面的窗口。

 

vim 环境设定与记录(~/.vimrc, ~/.viminfo)

 

如果我们以vim软件来查找一个文件内部的某个字符串时,这个字符串会被反白, 而下次我们再次以vim编辑这个文件时,该查找的字符串反白情况还是存在。另外,当我们重复编辑同一个文件时,当第二次进入该文件时, 光标竟然就在上次离开的那一行的开头。这个功能可能是方便,但也有不方便的时候。怎么会这样呢?这是因为我们的vim会主动的将你曾经做过的行为登录下来,那个记录动作的文件就是: ~/.viminfo,不想用这个功能,就直接删除~/.viminfo。只要你曾经使用过vim,那么你的家目录就会有这个文件。这个文件是自动产生的,你在vim里头所做过的动作,就可以在这个文件内部找到。有兴趣的朋友可以自己查看文件里面的内容。

不过,对于每个不同的发行版本对vim的预设环境都不太相同。举例来说,某些版本在查找到关键词时并不会高亮度反白, 有些版本则会主动的帮你进行缩排(所谓的缩排,就是当你按下 Enter 编辑新的一行时,光标不会在行首,而是在与上一行的第一个非空格符处对齐)的行为。其实这些都可以自行设定的,下面我们就来看看vim的环境设定。
vim的环境设定参数有很多,如果你想要知道目前的设定值,可以在一般模式时输入【 :set all】来查阅,由于设定项目实在太多了,我们在这里就仅列出一些平时比较常用的一些简单的设定值,给大家提供参考。

:set all “显示目前所有的环境参数设定值
:set hlsearch “高亮度反白(高亮度搜寻)
:set nohlsearch “取消高亮度反白(高亮度搜寻)
:set backspace=2 “在编辑的时候可随时用退格键删除 (0、1的时候,只针对刚输入的字符有效)
:set autoindent “自动缩排
:set noautoindent “取消自动缩排
:set ruler “可显示最后一行的状态
:set showmode “左下角那一行的状态
:set nu “显示行号
:set nonu “取消行号
:set bg=dark “显示不同的底色色调
:syntax on “进行语法检验,颜色显示
:syntax off “关闭语法检验

了解完上面的内容后,下面我们就能写一下自己的vim操作环境。
整体vim的设定值一般是置在/etc/vimrc这个文件里面,不建议大家来修改他。我们在自己的家目录里面建立个.vimrc文件,在这里面写入自己的内容就能实现了。
[[email protected] ~]# vim ~/.vimrc
内容如下
set hlsearch “高亮度反白
set backspace=2 “可随时用退格键删除
set autoindent “自动缩排
set ruler “可显示最后一行的状态
set showmode “左下角那一行的状态
set nu “可以在每一行的最前面显示行号
set bg=dark “显示不同的底色色调
syntax on “进行语法检验,颜色显示
“这个文件的双引号 (“)表示的是注释

保存退出vim后,在下次使用vim的时候,就会有自己的vim操作环境了。
提醒一点,这个文件中每一行前面加不加【:】效果都是一样的。

最后,给也几张不错的图,帮助大家更快的来掌握vi/vim,记住一点,不要死记,重在操作。

vim1

vim3

vim2

本文关键字:一天一点,学习Linux,vi,vim

vimrc配置

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 一般设定

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 设定主题

colo evening

 

” 显示行号

set nu

 

” 不要使用vi的键盘模式,而是vim自己的

set nocompatible

 

” history文件中需要记录的行数

set history=100

 

” 在处理未保存或只读文件的时候,弹出确认

set confirm

 

” 与windows共享剪贴板

set clipboard+=unnamed

 

” 侦测文件类型

filetype on

 

” 载入文件类型插件

filetype plugin on

 

” 为特定文件类型载入相关缩进文件

filetype indent on

 

” 保存全局变量

set viminfo+=!

 

” 带有如下符号的单词不要被换行分割

set iskeyword+=_,$,@,%,#,-

 

” 语法高亮

syntax on

 

” 高亮字符,让其不受100列限制

“:highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white

“:match OverLength ‘\%101v.*’

 

” 状态行颜色

highlight StatusLine guifg=SlateBlue guibg=Yellow

highlight StatusLineNC guifg=Gray guibg=White

 

“a 高亮光标所在的行

set cursorline

 

” 不要闪烁

“set novisualbell

 

” 总是显示状态行

set laststatus=2

 

“a 状态栏显示目前所执行的指令

set showcmd

 

“a修改 vmirc 后自动生效

autocmd! bufwritepost .vimrc source ~/.vimrc

 

” 增强模式中的命令行自动完成操作

set wildmenu

 

” 在状态行上显示光标所在位置的行号和列号

set ruler

set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l%c\ %p%%%)

 

” 命令行(在状态行下)的高度,默认为1,这里是2

set cmdheight=2

 

” 使回格键(backspace)正常处理indent, eol, start等

set backspace=2

 

” 允许backspace和光标键跨越行边界原为set whichwrap+=<,>,h,l,但会屏敝缩进功能<或>

set whichwrap+=h,l

 

” 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)

set mouse=a

set selection=exclusive

set selectmode=mouse,key

 

” 启动的时候不显示那个援助索马里儿童的提示

set shortmess=atI

 

” 通过使用: commands命令,告诉我们文件的哪一行被改变过

set report=0

 

” 不让vim发出讨厌的滴滴声

“set noerrorbells

 

” 在被分割的窗口间显示空白,便于阅读

set fillchars=vert:\ ,stl:\ ,stlnc:\

 

” 光标移动到buffer的顶部和底部时保持3行距离

“set scrolloff=3

 

” 用空格键来开关折叠

set foldenable

set foldmethod=manual

nnoremap  @=((foldclosed(line(‘.’)) < 0) ? ‘zc’ : ‘zo’)

 

” 设定默认解码

set fenc=utf-8

set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936

 

“设定字体

“set guifont=Courier_New:h11:cANSI

set guifontwide=新宋体:h11:cGB2312

 

” 设定编码

set enc=utf-8

set fileencodings=ucs-bom,utf-8,chinese

set langmenu=zh_CN.UTF-8

language message zh_CN.UTF-8

source $VIMRUNTIME/delmenu.vim

source $VIMRUNTIME/menu.vim

 

 

“”自动补全

“filetype plugin indent on

“set completeopt=longest,menu

“”自动补全命令时候使用菜单式匹配列表

“set wildmenu

“autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete

“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 java set omnifunc=javacomplete#Complet

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 搜索和匹配

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 高亮显示匹配的括号

set showmatch

 

” 匹配括号高亮的时间(单位是十分之一秒)

set matchtime=5

 

” 在搜索的时候忽略大小写

set ignorecase

 

” 高亮被搜索的句子(phrases)

set hlsearch

 

” 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)

set incsearch

 

” 输入:set list命令是应该显示些啥?

set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 菜单栏和工具栏的设置

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

if has(“gui_running”)

” 关闭菜单栏

“”set guioptions-=m

” 关闭工具栏

set guioptions-=T

endif

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 文件设置

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 不要备份文件(根据自己需要取舍)

set nobackup

 

” 不要生成swap文件,当buffer被丢弃的时候隐藏它

setlocal noswapfile

set bufhidden=hide

 

” 字符间插入的像素行数目

set linespace=0

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 文本格式和排版

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 自动格式化

set formatoptions=tcrqn

 

” 继承前一行的缩进方式,特别适用于多行注释

set autoindent

 

” 为C程序提供自动缩进

set smartindent

 

” 使用C样式的缩进

set cindent

 

” 制表符为4

set tabstop=4

 

” 统一缩进为4

set softtabstop=4

set shiftwidth=4

 

” 用空格代替制表符

set expandtab

 

” 不要换行

“set nowrap

 

” 在行和段开始处使用制表符

“set smartta

 

 

“设置变量$VIMFILES

if has(“win32”)

let $VIMFILES = $VIM.’/vimfiles’

else

let $VIMFILES = $HOME.’/.vim’

endif

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 设置比较模式

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

set diffexpr=MyDiff()

function MyDiff()

let opt = ‘-a –binary ‘

if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ‘ | endif

if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ‘ | endif

let arg1 = v:fname_in

if arg1 =~ ‘ ‘ | let arg1 = ‘”‘ . arg1 . ‘”‘ | endif

let arg2 = v:fname_new

if arg2 =~ ‘ ‘ | let arg2 = ‘”‘ . arg2 . ‘”‘ | endif

let arg3 = v:fname_out

if arg3 =~ ‘ ‘ | let arg3 = ‘”‘ . arg3 . ‘”‘ | endif

let eq = ”

if $VIMRUNTIME =~ ‘ ‘

if &sh =~ ‘\<cmd’

let cmd = ‘””‘ . $VIMRUNTIME . ‘\diff”‘

let eq = ‘”‘

else

let cmd = substitute($VIMRUNTIME, ‘ ‘, ‘” ‘, ”) . ‘\diff”‘

endif

else

let cmd = $VIMRUNTIME . ‘\diff’

endif

silent execute ‘!’ . cmd . ‘ ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3 . eq

endfunction

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“”设置状态栏的显示信息

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“a版本检测是不适用

if v:version < 700

echoerr ‘This _vimrc requires Vim 7 or later.’

quit

endif

 

“a 获得当前目录

function! CurrectDir()

return substitute(getcwd(), “”, “”, “g”)

endfunction

“a 返回当前时间

func! GetTimeInfo()

return strftime(‘%Y-%m-%d %A %H:%M:%S’)

endfunction

 

” 状态行显示的内容(包括文件类型和解码)

set statusline=\ [File]\ %F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y][POS=%l,%v][%p%%]\ %{strftime(\”%d/%m/%y\ -\ %H:%M\”)}%r%{CurrectDir()}%h\ %=\ [Line]%l/%L\ %=\[%P]

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“””””以下参考网上编译与调试C和C++的设置 m “””””””””””””””””””””””””””””””

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“定义CompileRun函数,用来调用进行编译和运行

“func CompileRun()

“exec “w”

“”C程序

“if &filetype == ‘c’

“exec “!gcc -Wall -enable-auto-import % -g -o %<.exe”

“”c++程序

“elseif &filetype == ‘cpp’

“exec “!g++ -Wall -enable-auto-import  % -g -o %<.exe”

“”Java程序

“elseif &filetype == ‘java’

“exec “!javac %”

“endif

“endfunc

“”结束定义CompileRun

“”定义Run函数

“func Run()

“if &filetype == ‘c’ || &filetype == ‘cpp’

“exec “!%<.exe”

“elseif &filetype == ‘java’

“exec “!java %<”

“endif

“endfunc

“”定义Debug函数,用来调试程序

“func Debug()

“exec “w”

“”C程序

“if &filetype == ‘c’

“exec “!gcc % -g -o %<.exe”

“exec “!gdb %<.exe”

“elseif &filetype == ‘cpp’

“exec “!g++ % -g -o %<.exe”

“exec “!gdb %<.exe”

“”Java程序

“elseif &filetype == ‘java’

“exec “!javac %”

“exec “!jdb %<”

“endif

“endfunc

“结束定义Debug

“设置程序的运行和调试的快捷键F5和Ctrl-F5

“map <F5> :call CompileRun()<CR>

“map <F6> :call Run()<CR>

“map <C-F5> :call Debug()<CR>

“1、在PATH里加入G:\MinGW\bin,记得,如果里面还有其他的变量,记得要加个分号啊,分号得在英文输入模式下输入的。

“2、新建LIBRARY_PATH变量,如果有的话,在值中加入G:\MinGW\lib,这是标准库的位置。

“3、新建C_INCLUDEDE_PATH变量,值设为G:\MinGW\include。

“4、新建CPLUS_INCLUDE_PATH变量,值为G:\MinGW\include;G:\MinGW\include\c++\4.

“5.0;G:\MinGW\include\c++\4.5.0\backward;G:\MinGW\include\c++\4.5.0\mingw32

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” pathogen插件管理-插件

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

call pathogen#helptags()

call pathogen#runtime_append_all_bundles()

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Mark-插件  修改mark.vim添加加下几行

”    使用*向后,*向前搜索

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“nmap <silent> <leader>hl <Plug>MarkSet

“vmap <silent> <leader>hl <Plug>MarkSet

“nmap <silent> <leader>hh <Plug>MarkClear

“vmap <silent> <leader>hh <Plug>MarkClear

“nmap <silent> <leader>hr <Plug>MarkRegex

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“vimwiki-plugin设置  Key: <F4> :Vimwiki2HTML

”                         <S-F4> :VimwikiAll2HTML

”                         <C-F4>  打开浏览器:   map <C-F4> <Esc>!D:\ChromePlus\chrome.exe d:\softs\vim\vimwiki\wiki_html\index.html

”                        ,ww 开启vimwiki

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” F4当前页生成HTML,Shift+F4 全部页生成HTML

map <S-F4> :VimwikiAll2HTML<cr>

map <F4> :Vimwiki2HTML<cr>

 

” 对中文用户来说,我们并不怎么需要驼峰英文成为维基词条

let g:vimwiki_camel_case = 0

” 标记为完成的 checklist 项目会有特别的颜色

let g:vimwiki_hl_cb_checked = 1

 

” 下面取消vimwiki菜单

“let g:vimwiki_menu = ”

 

” 是否开启按语法折叠  会让文件比较慢

“let g:vimwiki_folding = 1

 

” 是否在计算字串长度时用特别考虑中文字符

let g:vimwiki_CJK_length = 1

” 详见下文…

let g:vimwiki_valid_html_tags=’b,i,s,u,sub,sup,kbd,del,br,hr,div,code,h1′

” 启用鼠标

let g:vimwiki_use_mouse = 1

 

let g:vimwiki_hl_cb_checked = 1

 

“对[]中的选中切换

map <S-Space> <Plug>VimwikiToggleListItem

“你可能不喜欢文件名中包含空格(就像其他 vimwiki 用户一样),如果这样,你可以设置将那些坏字符转换为指定的字符

let g:vimwiki_badsyms = ‘ ‘

“在Windows你不能使用 /*?<>” 作为文件名,所以 vimwiki 替换它们为_

let g:vimwiki_stripsym = ‘_’

 

“0 关闭标题的编号。

“1 开启标题的编号。编号从一级标题开始。

“2 开启标题的编号。彪悍从二级标题开始。

let g:vimwiki_html_header_numbering = 1

 

“每一行显示日期链接的最大数目。

let g:diary_link_count=5

 

let g:vimwiki_file_exts = ‘pdf,txt,doc,rtf,xls,php,zip,rar,7z,html,gz,jsp’

 

map <C-F4> <Esc>!D:\ChromePlus\chrome.exe d:\softs\vim\vimwiki\wiki_html\index.html

 

“设置语法高亮

let syntaxs = {‘python’: ‘python’, ‘c++’: ‘cpp’, ‘c’: ‘c’, ‘java’: ‘java’,

\’lua’: ‘lua’, ‘ruby’: ‘ruby’, ‘pascal’: ‘pascal’, ‘lisp’: ‘lisp’, ‘css’: ‘css’,

\’groovy’: ‘groovy’, ‘ant’: ‘ant’, ‘php’: ‘php’, ‘perl’: ‘perl’, ‘zsh’: ‘zsh’,

\’tcl’: ‘tcl’, ‘vb’: ‘vb’, ‘javascript’: ‘javascript’, ‘sql’: ‘sql’, ‘mysql’: ‘mysql’,

\’vim’: ‘vim’, ‘erlang’: ‘erlang’}

“第n个wiki的设置,可调置多个哦:)

let wiki1 = {‘path’: $VIM.’/vimwiki/wiki/’,

‘html_header’: $VIM.’/vimwiki/vimwiki_template/header.htm’,

‘html_footer’:  $VIM.’/vimwiki/vimwiki_template/footer.htm’,

‘css_name’: ‘css/style.css’,

‘diary_link_count’: 6}

 

let wiki_tmp = {‘path’: ‘c:/vimwiki/wiki/’,

‘html_header’: $VIM.’/vimwiki/vimwiki_template/header.htm’,

‘html_footer’:  $VIM.’/vimwiki/vimwiki_template/footer.htm’,

‘css_name’: ‘css/style.css’,

‘diary_link_count’: 6}

 

let wiki1.nested_syntaxes = syntaxs

“将n个wiki加入

let g:vimwiki_list = [wiki1,wiki_tmp]

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” sketch插件设置  key:\drs

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

noremap <leader>drs :call ToggleSketch()<CR>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Drawit插件设置  key: \dri

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

function Drawit_f2()

if exists(“g:loaded_drawit”)

exe “DIstop”

unlet g:loaded_drawit

else

exe “DIstart”

let g:loaded_drawit = 0

endif

endfunction

noremap <leader>dri :call Drawit_f2()<CR>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” 终端模拟插件ConqueTerm设置

”     需要vim支持:python接口

”     使用: C mysql 或 C sqlite 或 C cmd等

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“设置python路径

let g:ConqueTerm_PyExe = ‘c:\python27\python.exe’

 

“快速模式

let g:ConqueTerm_FastMode = 0

 

“let g:ConqueTerm_Color = 1

let g:ConqueTerm_PromptRegex = ‘^\w\[email protected][0-9A-Za-z_.-]\+:[0-9A-Za-z_./\~,:-]\+\$’

 

let g:ConqueTerm_SessionSupport = 0

 

“let g:ConqueTerm_ReadUnfocused = 1

 

let g:ConqueTerm_InsertOnEnter = 0

“隐藏启动信息

let g:ConqueTerm_StartMessages = 0

 

let g:ConqueTerm_ColorMode = ‘conceal’

 

command -nargs=+ C :ConqueTermTab <args>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“部分指令快捷键 *非插件

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

nmap ss :w<CR>     ” 保存当前文件

nmap sq :wq<CR>    ” 保存当前文件并退出

imap <Leader>ymd   <C-R>=strftime(“%y%m%d”)<CR>

imap <Leader>mdy   <C-R>=strftime(“%m/%d/%y”)<CR>

imap <Leader>ndy   <C-R>=strftime(“%b %d, %Y”)<CR>

imap <Leader>ynd   <C-R>=strftime(“%Y %b %d”)<CR>

com! YMD :norm! i<C-R>=strftime(“%y%m%d”)<CR>

com! MDY :norm! i<C-R>=strftime(“%m/%d/%y”)<CR>

com! NDY :norm! i<C-R>=strftime(“%b %d, %Y”)<CR>

 

” 自动更改到当前文件所在的目录

autocmd BufEnter * lcd %:p:h

 

 

“<C-D>补全宏定义  <C-F>补全文件名  <C-L>整行补全  <C-B>当前文件里关键字补全<C-V>

inoremap <C-F>  <C-X><C-F>

inoremap <C-D>  <C-X><C-D>

inoremap <C-L>  <C-X><C-L>

inoremap <C-B>  <C-X><C-N>

inoremap <C-V>  <C-X><C-P>

“如果下拉菜单弹出,回车映射为接受当前所选项目,否则,仍映射为回车

inoremap <expr> <CR>  pumvisible()?”\<C-Y>”:”\<CR>”

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“窗口操作的快捷键 *非插件

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

nmap wv <C-w>v     ” 垂直分割当前窗口

nmap ws <C-w>s     ” 水平分割当前窗口

nmap wc <C-w>c     ” 关闭当前窗口

nmap wd :bd<CR>    ” 清空当前窗口

nmap wq :q<CR>     ” 退出

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Winmanager  key: wm   引用了BufExplorer和TagList插件

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“加入TagList,BufExplorer窗口

let g:winManagerWindowLayout=’FileExplorer|TagList|BufExplorer’

map <c-w><c-f> :FirstExplorerWindow<cr>

map <c-w><c-b> :BottomExplorerWindow<cr>

nmap wm :WMToggle<cr>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Project1.4.1插件设置

”    key: spr

”  操作 \c 创建项目; \C 创建子项目;

”       \w 从当前项目移除所有当前层的文件

”       \W 从当前项目移除所有的文件

”       \r 刷新项目; \R 递归刷新项目

”      \l 加载当前项目中的所有文件到VIM,加载过程按任何键可以停止加载

”       \1 – \9  执行在 g:proj_run{x} 指定的命令, {x} 是执行命令入口的编号

”       \0 显示由 \1 到 \9 定义的命令

”       \f1-\f9 执行 g:proj_run_fold{x} 中指定的命令,{x}执行命令入口的编号, 命令只针对当前项目层的文件

”       \0 显示由 \1 到 \9 定义的命令; f0类似

”       Ctrl+↑\↓ 移动文本或者折叠到当前光标的上一行

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“project.vim第24行将默认路径改为 let filename = $VIM.’/projects/.vimprojects’

” 并在$VIM目录下建”projects”目录

nmap spr <plug>ToggleProject

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Tag list (ctags)  key: wtl   –WTL

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

if has(“win32”)                        “设定windows系统中ctags程序的位置

let Tlist_Ctags_Cmd = ‘ctags’

else                               “设定linux系统中ctags程序的位置

let Tlist_Ctags_Cmd = ‘/usr/bin/ctags’

endif

let Tlist_Show_One_File = 1            “不同时显示多个文件的tag,只显示当前文件的

let Tlist_Exit_OnlyWindow = 1          “如果taglist窗口是最后一个窗口,则退出vim

let Tlist_Use_Left_Window = 1          “在左侧窗口中显示taglist窗口

nmap wtl :TlistOpen<RETURN>

 

nmap ctagsc :!ctags -R –c++-kinds=+p –fields=+iaS –extra=+q .<CR>

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Mru  key: wff    记录打开过的文件

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

let MRU_File = $VIM.’/_vim_mru_files’

let MRU_Max_Entries = 1000

let MRU_Add_Menu = 0

nmap wff :MRU<CR>

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” BufExplorer  key: wfb  记录已打开的文件

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

nmap wfb :BufExplorer<CR>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” NERDTree插件设置

”                  key: wfs

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“NERDTree的窗口在左边还是右边

let NERDTreeWinPos = “right”

“NERD tree窗口的大小

“let NERDTreeWinSize = 31

” 映射wfs键为打开和关闭NERDTree的快捷键

nmap wfs :NERDTreeToggle<RETURN>

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” TabBar 插件设置    默认key: Ctrl+Tab   Ctrl+Shift+Tab

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

let g:Tb_SplitBelow=0

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” pydiction插件 1.2 自动完成增强

“修改python_pydiction.vim第62中的<Tab>为<C-J>

“修改python_pydiction.vim第68中的<S-Tab>为<C-L>

“修改python_pydiction.vim第95中的”\<Tab>”为”\<C-L>”

” *.py     key: Ctrl+J弹出提示, Ctrl+L退出提示

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

let g:pydiction_location = $VIMFILES.’\bundle\G-pydiction-1.2\ftplugin\complete-dict’

let g:pydiction_menu_height = 20

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” DbExt插件设置

”                  key: ,sbp ,se ,st

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“这样执行命令的时候,就知道dbext是怎样调用的了

“let g:dbext_default_display_cmd_line = 1

 

“返回结果数

let g:dbext_default_buffer_lines = 10

 

“以每个buffer返回结果,默认 0

let g:dbext_default_use_sep_result_buffer = 1

 

“设置成右边窗口显示

“let g:dbext_default_window_use_horiz = 0

“let g:dbext_default_window_use_right = 1

 

let g:dbext_default_profile_mysql = ‘type=MYSQL:user=root:passwd=:dbname=test:extra=-t’

let g:dbext_default_profile_PG = ‘type=PGSQL:user=postgres:passwd=33444433:dsnname=:srvname=localhost:dbname=test:host=localhost:port=5432’

let g:dbext_default_profile_Sqlite = ‘type=SQLITE:SQLITE_bin=d:\softs\batch\sqlite.exe:dbname=C:\test.db’

 

 

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” CVim 5.14 插件设置

”  bug修改c.vim第88行 if match( expand(“<sfile>”), expand(“$HOME”) ) == 0

”                  为 if match( resolve(expand(“<sfile>”)), resolve(expand(“$HOME”))) == 0

“pathogen 修改c.vim第69行为 let s:plugin_dir = $VIM.’/vimfiles/bundle/C-cvim-5.14/’

“在c.vim第204行上3yyp(即复制第204至206行)修改C_GlobalTemplateFile为C_LocalTemplateFile, C_GlobalTemplateDir为C_LocalTemplateDir

“即 if exists(‘g:C_LocalTemplateFile’) && g:C_LocalTemplateFile != ”

”      let s:C_LocalTemplateDir = fnamemodify( s:C_LocalTemplateFile, “:h” )

”   endif

”     Key: Ctrl+j跳到下个snipKey

“””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

let g:C_GlobalTemplateFile = $VIMFILES.’/bundle/C-cvim-5.14/c-support/templates/templates’

let g:C_GlobalTemplateDir = $VIMFILES.’/bundle/C-cvim-5.14/c-support/templates’

 

“在$VIM目录下建CVim-Support-my\Templates\目录

let g:C_LocalTemplateFile = $VIM.’\CVim-Support-my\Templates\Templates’

 

let g:C_CodeSnippets = $VIMFILES.’\bundle\C-cvim-5.14\c-support\codesnippets\’

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” cscope show in quickfix

” 从 http://sourceforge.net/projects/mslk/ 下载windows版的cscope

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

set cscopequickfix=s-,c-,d-,i-,t-,e-

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” LateX-Suite 1.s

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

“set shellslash

“set grepprg=grep\ -nH\ $*

“”解决打开空白的tex文件,gvim并不会载入latex-suite的菜单

“let g:tex_flavor=’latex’

 

“let g:Tex_DefaultTargetFormat=”pdf”

“let g:Tex_ViewRule_pdf=’foxit’

 

“”解决自动添加<++>代码的问题

“let g:Imap_UsePlaceHolders = 0

 

“let g:Tex_IgnoredWarnings=1

“let g:Tex_IgnoreLevel = 1

 

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

” Grep 插件

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

let Grep_Path = ‘D:\softs\UnxUtils\wbin\grep.exe’

let AGrep_Path = ‘D:\softs\UnxUtils\wbin\agrep.exe’

let Fgrep_Path = ‘D:\softs\UnxUtils\wbin\fgrep.exe’

let Egrep_Path = ‘D:\softs\UnxUtils\wbin\egrep.exe’

let Grep_Find_Path = ‘D:\softs\UnxUtils\wbin\find.exe’

let Grep_Xargs_Path = ‘D:\softs\UnxUtils\wbin\xargs.exe’

let Grep_Default_Filelist = ‘*.[chS]’

let Grep_Default_Options = ‘-rin’

let Grep_OpenQuickfixWindow = 1

set grepprg=grep\ -nri

 

 

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

”  PyFlakes 3.01 插件(语法检测)

“”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

if has(“gui_running”)

highlight SpellBad term=underline gui=undercurl guisp=Orange

endif

 

[http://www.360doc.com/content/13/0123/15/11529544_261963744.shtml]

vim常用命令

:qx     开始记录宏,并将结果存入寄存器x
q     退出记录模式
@x     播放记录在x寄存器中的宏命令
稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模
式,然后输入@x对刚才记录下来的命令进行重复,此命令后可跟数字,表示要重复多少次,比如@x20,可以重复20次。这个在文本的批处理中是非常有用的。
同时编辑多个文件
在vim众多的插件中,有一个叫minibuffer的插件,就是下面所说的标签页功能了,可以支持同时编辑多个文件。
标签命令

:tabe fn     在一个新的标签页中编辑文件fn
gt     切换到下一个标签页
gT     切换到上一个标签页
:tabr     切换到第一个标签页
:tabl     切换到最后一个标签页
:tabm [N]     把当前tab移动到第N个tab之后
对,正如你所想象的那样,跟eclipse, ue等的标签页是一个意思!
窗口命令
ctrl+w s     水平分割窗口
ctrl+w w     切换窗口
ctrl+w q     退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
ctrl+w v     垂直分割窗口
其他
vim在保存之前不会对文件做实际的修改,只是加载到缓冲区中,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件。

:e file     把file加载到新的缓冲区中
:bn     跳转到下一个缓冲区
:bd     删除缓冲区(关闭文件)
:sp fn     分割窗口,并将fn加载到新的窗口中
退出编辑器

:w     将缓冲区写入文件,即保存修改
:wq     保存修改并退出
😡     保存修改并退出
:q     退出,如果对缓冲区进行过修改,则会提示
:q!     强制退出,放弃修改
查找替换
/pattern     向后搜索字符串pattern
?pattern     向前搜索字符串pattern
n     下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
N     上一个匹配(同上)
:%s/old/new/g     搜索整个文件,将所有的old替换为new
:%s/old/new/gc     搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
复制粘贴
dd     删除光标所在行
dw     删除一个字(word)
x     删除当前字符
X     删除前一个字符
D     删除到行末
yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
yw     复制一个字
y$     复制到行末
p     粘贴粘贴板的内容到当前行的下面
P     粘贴粘贴板的内容到当前行的上面
]p     有缩进的粘贴,vim会自动调节代码的缩进
“a     将内容放入/存入a寄存器,可以支持多粘贴板
附:比如常用的一个寄存器就是系统寄存器,名称为+,所以从系统粘贴板粘贴到vim中的命令为”+p,注意此处的+不表示操作符,二十一个寄存器。
移动光标
在vim中移动光标跟其他的编辑器中有很大的区别,不过一旦学会了,就会飞速的在文本中移动了。

h,j,k,l     上,下,左,右
ctrl-f     上翻一页
ctrl-b     下翻一页
%     跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处
w     跳到下一个字首,按标点或单词分割
W     跳到下一个字首,长跳,如end-of-line被认为是一个字
e     跳到下一个字尾
E     跳到下一个字尾,长跳
b     跳到上一个字
B     跳到上一个字,长跳
0     跳至行首,不管有无缩进,就是跳到第0个字符
^     跳至行首的第一个字符
$     跳至行尾
gg     跳至文件的第一行
gd     跳至当前光标所在的变量的声明处
[N]G     跳到第N行,如0G,就等价于gg,100G就是第100行
fx     在当前行中找x字符,找到了就跳转至
;     重复上一个f命令,而不用重复的输入fx
tx     与fx类似,但是只是跳转到x的前一个字符处
Fx     跟fx的方向相反
),(     跳转到上/下一个语句
*     查找光标所在处的单词,向下查找
#     查找光标所在处的单词,向上查找
`.     跳转至上次编辑位置
在屏幕上移动

H     移动光标到当前屏幕上最上边的一行
M     移动光标到当前屏幕上中间的一行
L     移动光标到当前屏幕上最下边的一行
书签
ma     把当前位置存成标签a
`a     跳转到标签a处
编辑
r     替换一个字符
J     将下一行和当前行连接为一行
cc     删除当前行并进入编辑模式
cw     删除当前字,并进入编辑模式
c$     擦除从当前位置至行末的内容,并进入编辑模式
s     删除当前字符并进入编辑模式
S     删除光标所在行并进入编辑模式
xp     交换当前字符和下一个字符
u     撤销
ctrl+r     重做
.     重复上一个编辑命令
~     切换大小写,当前字符
g~iw     切换当前字的大小写
gUiw     将当前字变成大写
guiw     将当前字变成小写
>>     将当前行右移一个单位
<<     将当前行左移一个单位(一个tab符)
==     自动缩进当前行

插入模式
i     从当前光标处进入插入模式
I     进入插入模式,并置光标于行首
a     追加模式,置光标于当前光标之后
A     追加模式,置光标于行末
o     在当前行之下新加一行,并进入插入模式
O     在当前行之上新加一行,并进入插入模式
Esc     退出插入模式
可视模式
标记文本
v     进入可视模式,单字符模式
V     进入可视模式,行模式
ctrl+v     进入可视模式,列模式,类似于UE的列模式
o     跳转光标到选中块的另一个端点
U     将选中块中的内容转成大写
O     跳转光标到块的另一个端点
aw     选中一个字
ab     选中括号中的所有内容,包括括号本身
aB     选中{}括号中的所有内容
ib     选中括号中的内容,不含括号
iB     选中{}中的内容,不含{}

对标记进行动作
>     块右移
<     块左移
y     复制块
d     删除块
~     切换块中内容的大小写