自己根据马哥教程总结的部分Vim基础使用
Vim是一款很强大的文本编辑工具.如果你常需要书写或编辑大量文本,那学会它绝对会让你的工作与学习如虎添翼.
几种模式:
1.命令 : 默认进入显示的为命令模式,光标为粗竖线。按[aAiIoO..]等字母可切换到编辑模式.
2.编辑 : 光标为细竖线。别的模式按‘Esc’或'Ctrl+c'可以切换到命令模式.
3.末行 : 在命令模式下输入‘:’号可以切换到末行.
4.可视 : 在命令模式下输入v或V可切换到可视模式.
打开文件:
vim +num file : 打开文件后光标处于第num行第一个字符处.
vim + file: 打开文件后光标在最后一行。
vim +/PATTERN file : 打开文件后光标处于第一个被PATTERN匹配到的地方
同时打开多个文件:
用法 :vim file1 file2 ... (默认只显示第一个打开的文件,因为只有一个窗口)
:next 打开下个file
:prev 打开上个file
:first 打开第一个file
:last 打开最后一个file
退出所有文件:
:wall 保存所有文件
:qall 退出所有文件
:wqall 保存退出所有文件匹配到的行的行首
多窗口操作多个文件
多窗口同时显示多个文件:
vim -o file1 file2 水平分割窗口(即file1在上file2在下) Ctrl+w 松开后再 按上下方向键切换光标所在窗口
vim -O file1 file2 垂直分割窗口(即file1在左file2在右) Ctrl+w 松开后再按左右方向键切换光标所在窗口
再切分文件:
Ctrl+w,s: 水平分割光标所在的窗口,即上下显示同一个文件(逗号处表松开前两键)
Ctrl+w,v: 垂直分割光标所在的窗口,即左右显示当前文件的两份相同的内容(同上)
Ctrl+w,c: 在光标所在的窗口中依次取消多窗口(同Ctrl + w,q功能一致)
Ctrl+w,x: 交换同一文件但多个窗口中的内容(即窗口位置互相调换)
命令模式下的光标跳转操作
#G : #号用数字替代,表示跳至第#行,这个功能还可以用末行模式来完成:按':'号然后输入想查找的行号回车即可.如 :25
+ : 光标移动到非空格符的下一列
- : 光标移动到非空格符的上一列
H : 光标移动到当前屏第一行第一个字符
M : 光标移到当前屏中间行第一个字符
L : 光标移动至当前屏最后一行第一个字符
行首行尾跳转:
^ : 跳转至行首第一个非空白字符
$ : 中转至行尾最后一个非空白字符
0 : 中转至绝对行首
句间跳转:vim -R file: 以只读模式打开file文件。
单词间跳转:
w : 下一个单词的词首
b : 上一个单词的词首
e : 下一个单词的词尾
n <space> : 光标向右偏移n个字符
行间跳转:
gg: 跳至文件第一行
G : 跳至文件最后一行
n <enter> : 光标向下移动n行
行内跳转:
0: 绝对行首
^: 行内第一个非空白字符
$: 绝对行尾
句子跳转:
) : 句子间跳转,用得少
( :
段间跳转:
} :
{ :
翻屏:
Ctrl + f: 文件后翻一屏
Ctrl + d: 半屏
Ctrl + b: 文件前翻一屏
Ctrl + u: 半屏
命令模式下的编辑操作
编辑(支持前面加数字):
删除:
x,X(向前删一个字符), xp(对调)
dd,db,de,d^,d$,...
改变:会切换到输入模式
c, cc, cw, c$, c^
替换:
r : 替换光标当前那个字符
R : 会一直替换光标所指的文字,直到按下ESC为止
复制:(yank)
y (用法同删除d类似) 如yy即复制一行
粘贴:
P(当前行上一行), p(往当前行下一行)
如果复制或删除的不是整行则
P --> 粘贴在光标所在字符的前面
p --> 后
撤销:
u : 撤销此前的操作
#u: 撤销此前#个操作
撤销此前的撤销: Ctrl + r
重复执行此前的命令: .
插入: i I
添加: a A
插入新一行: o O
可视模式(相当于窗口界面上用鼠标选中一段内容):
v : 按字符选定
V : 按行选定
对选定的内容可结合上述编辑命令进行操作
末行模式:
1. 地址定界
%: 表示全文
.: 表示当前行
$: 表示最后一行
+#: 向下的#行
strart_pos[,end_pos]:
例如:5 第5行
:5,10 从第5行到第10行 # 示例删除5至99行内容 :5,99d
:5,+10 从第5行开始往后加10行
/pattern/: 光标所在处起始向文件尾部第一次被模式所匹配到的行 # :/
如 :/first/,$
:/pattern1/,/pattern2/ 表示从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束.
同地址定界符配合使用的命令:
d,y,c,
w /PATH/TO/SOMEFILE: 将范围内的文本保存至指宝的文件中.
r /PATH/TO/SOMEFILE: 将指定的文件中的文件读取并插入至指定的位置.
2.查找(这个方法同Linux man手册是一样的)
/PATTERN: 从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
n 下一个
N 上一个
?PATTERN: 从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
n与N的用法与上面相反
3.查找并替换
格式:
:s/old/new/修饰符 其中old可使得正则表达式,new不能使用正则表达式但可以引用.
修饰符:
i : 查找时忽略大小写
g : 全局替换,意味着一行中如果匹配到多次则均替换
4. 常用示例:
:g/^$/d 删除空白行
5. 写输出(拷贝 保存)保存到其他文件
:35,46 w /root/new.txt
6. 在当前光标后 读(插)入新内容
:r /home/james/books.txt
Vim配置文件常用功能配置指令:
vim FILE +NUM: 定位具体某行打开FILE
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
set list " 显示tab与换行符"$"
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
filetype plugin indent on " 开启插件
set backupcopy=yes " 设置备份时的行为为覆盖
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
" set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
" set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set guioptions-=T " 隐藏工具栏
set guioptions-=m " 隐藏菜单栏
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
" 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为
" set foldclose=all " 设置为自动关闭折叠
" nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 用空格键来开关折叠
set nocompatible " 去掉有关vi一致性模式,避免以前版本的bug和局限"
set guifont=Luxi/ Mono/ 9 " 设置字体,字体名称和字号"
filetype on " 检测文件的类型"
set history=1000 " 记录历史的行数"
set background=dark " 背景使用黑色"
syntax on " 语法高亮度显示
set autoindent " vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)"
set cindent " (cindent是特别针对 C语言语法自动缩进)"
set smartindent " 依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用"
set tabstop=4 " 设置tab键为4个空格"
set shiftwidth =4 " 设置当行之间交错时使用4个空格"
set ai! " 设置自动缩进"
colorscheme molokai " 设定配色方案
set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的右括号"
set guioptions-=T " 去除vim的GUI版本中得toolbar"
set vb t_vb= " 当vim进行编辑时,如果命令错误,会发出警报,该设置去掉警报"
set ruler " 在编辑过程中,在右下角显示光标位置的状态行"
set nohls " 默认情况下,寻找匹配是高亮度显示,该设置关闭高亮显示"
set incsearch " 在程序中查询一单词,自动匹配单词的位置;如查询desk单词,当输到/d时,会自动找到第一个d开头的单词,当输入到/de时,会自动找到第一个以ds开头的单词,以此类推,进行查找;当找到要匹配的单词时,别忘记回车"
set backspace=2 " 设置退格键可用"
vim中切换模式时显示不同的光标形状(放置在家目录中的.vimrc文件中即可):
if has("autocmd")
au VimEnter,InsertLeave * silent execute '!echo -ne "\e[2 q"' | redraw!
au InsertEnter,InsertChange *
\ if v:insertmode == 'i' |
\ silent execute '!echo -ne "\e[6 q"' | redraw! |
\ elseif v:insertmode == 'r' |
\ silent execute '!echo -ne "\e[4 q"' | redraw! |
\ endif
au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
endif
最后分享个不错的VIM思维导图概览