原文:https://my.oschina.net/kutengshe/blog/464602
---------------------------------------------------------
vim中多标签和多窗口的使用
1、打开多个窗口
打开多个窗口的命令以下几个:
横向切割窗口
:new+窗口名(保存后就是文件名)
:split+窗口名,也可以简写为:sp+窗口名
纵向切割窗口名
:vsplit+窗口名,也可以简写为:vsp+窗口名
vim -o file1 file2 ... #水平打开多窗口,
vim -O file1 file2 ... #垂直打开多窗口,
vim -d file1 file2 ... #垂直打开多窗口,并且进行比较
vimdiff file1 file2 .. #等同于上一句
2、关闭多窗口
可以用:q!,也可以使用:close,最后一个窗口不能使用close关闭。使用close只是暂时关闭窗口,其内容还在缓存中,只有使用q!、w!或x才能真能退出。
关闭窗口
q 或 close #关闭当前窗口
only #保留当前窗口,关闭其它所有窗口
qall(qa) #退出所有窗口
wall #保存所有窗口
3、窗口切换
:ctrl+w+j/k,通过j/k可以上下切换,或者:ctrl+w加上下左右键,还可以通过快速双击ctrl+w依次切换窗口。
4、窗口大小调整
纵向调整
:ctrl+w + 纵向扩大(行数增加)
:ctrl+w - 纵向缩小 (行数减少)
:res(ize) num 例如::res 5,显示行数调整为5行
:res(ize)+num 把当前窗口高度增加num行
:res(ize)-num 把当前窗口高度减少num行
横向调整
:vertical res(ize) num 指定当前窗口为num列
:vertical res(ize)+num 把当前窗口增加num列
:vertical res(ize)-num 把当前窗口减少num列
5、给窗口重命名
:f file
6、vi打开多文件
vi a b c
:n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
:e# 回到刚才编辑的文件
7、文件浏览
:Ex 开启目录浏览器,可以浏览当前目录下的所有文件,并可以选择
:Sex 水平分割当前窗口,并在一个窗口中开启目录浏览器
:ls 显示当前buffer情况
8、vi与shell切换
:shell 可以在不关闭vi的情况下切换到shell命令行
:exit 从shell回到vi
9. 多标签
直接在编辑的时候输入:
vim -p 要编辑的文件名
如vim -p * 就是编辑当前目录的所有文件
多个标签间进行切换时向右切换gt,向左切换用gT
在编辑的时候想增加一个标签就可以:tabnew filename
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
1. vim基本用法:模式,光标移动,查找替换,复制粘贴删除
1.1 帮助
:help
:help command
1.2 模式切换
命令模式 Esc, Ctrl-c, 配合光标移动可用Alt-h,Alt-j,Alt-k,Alt-l
编辑模式 i 在当前位置编辑 , a在当前位置后面插入,I在行首插入,A在行尾插入,o添加新行
可视化模式 v块模式,V行块模式,Ctrl-v列块模式
下面的操作方式和快捷键基本上都是在命令模式下的,编辑模式按键一般只能输入文字。
1.3 输入方式
直接按键盘编辑 如i
:command 如:set nu
执行shell命令 :!command 如:!pwd
1.4 撤销,重做
撤销上一次的编辑操作 u, U
撤销未保存的全部编辑操作,重新载入文件 :e!
重做上一次撤销的编辑操作 Ctrl-r
1.5 保存,退出
保存文件 :w
关闭文件 :q
保存并关闭文件 :wq
不保存强制关闭文件 :q!
关闭所有文件退出 :qa
1.6 移屏
下翻页 Ctrl-f
上翻页 Ctrl-b
下翻行 Ctrl-e
上翻行 Ctrl-y
1.7 光标定位快捷键
到指定行 :行号,行号G
到文件头 1G
到文件尾 G
左下上右 h,j,k,l
下一个字 w,上一个字 b
到行首 ^
到行尾 $
行尾插入 A,添加空行 o
1.8 在函数中定位光标
[[ 转到上一个位于第一列的“{”
]] 转到下一个位于第一列的“{”
{ 转到上一个空行
} 转到下一个空行
1.9 查找当前文件
n,N 查找到key后,n跳到后一个位置,N跳到前一个位置
* , # 当前光标所在的词key作为关键字,精确匹配查找,相当于/\<key\>
g*, g# 当前光标所在的词key作为关键字,忽略大小写查找,相当于/key
/key 从当前光标位置开始向后查找key
?key 从当前光标位置开始向前查找key
/\<key\>,?\<key\> 精确匹配查找key
1.10 批量替换:%s/要被取代的字串/新的字串/g
1.11 复制粘贴删除
复制行 yy 复制n行 nyy
粘贴行 p
删除行 dd 删除n行 ndd
删除字 dw 复制字 yw
可视块选择复制:
进入可视化模式 v,V,Ctrl-v
可视化模式下,方向键选择块
按y复制选择的块
2. 配置:显示和编辑样式,配置文件
2.1 显示和编辑样式
在状态行显示文件名set statusline+=%f,set laststatus=2
显示行号 :set nu 隐藏行号 :set nonu
自动缩进 :set autoindent
c风格的缩进 :set cindent
显示断行符等特殊符号 :set list
2.2 配置文件
vim自带的配置文件 /etc/vimrc
用户自定义的配置文件 ~/.vimrc,自己创建。把自己的配置都写这里。
语法高亮 syntax on
3. vim用法: 多行注释,多文件,多窗格编辑,保存会话
3.1 多行注释
多行注释按键操作:
注释:Ctrl-v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符比如"#",按Esc,就会全部注释了。
删除:Ctrl-v 进入列编辑模式,向下或向上移动光标,选中注释部分,按d,就会删除注释符号。
多行注释使用替换命令:
:%s/^/\/\//g来在全部内容的行首添加//号注释
:2,50s/^/\/\//g在2~50行首添加//号注释
反过来替换既是删除操作。
3.2 编辑多个文件
打开多个文件 $ vim filename1 filename2
切换文件 :prev,:next,:prev!,:next!,first,last ,只要切换出来过,就在缓冲区里了
显示打开的文件列表 :args
打开新的缓冲区看别的文件 :e filename
切换最近的两个文件(缓冲区) :e# 或 Ctrl-^
显示缓冲区的文件列表 :buffers
关闭其中一个(当前)文件 :bd,:bd 1,:bd 2,序号按:buffers显示的
切换到某个文件 :b 1,:b 2,序号按:buffers显示的
切换到上一个文件 :bp,:bprev
切换到下一个文件 :bn,:bnext
3.3 多窗口编辑
分割窗口
水平分割
:sp //当前编辑的文件分割一个窗口再打开
:spfilename //分割一个窗口出来,打开文件filename
:split
:new
垂直分割
:vsplit
:vnew
切换窗口
Ctrl-w 上下左右键
Ctrl-w h,j,k,l //h左,j下,k上,l右 //Ctrl按下,按w松开,Ctrl松开,按h
移动窗口
Ctrl-W H,J,K,L //H左,J下,K上,L右 //锁定CapsLock就可以得到大写
改变窗口大小
水平最大化当前窗口 Ctrl-w Ctrl-- //这个是特殊的:Ctrl按下,按w松开,再按-松开,最后松开Ctrl
等分窗口 Ctrl-w =
调整窗口大小 Ctrl-w +增加窗口大小一行,Ctrl-w -减少窗口大小一行
显示命令历史窗口
q:或q/,退出:q
让当前文件占据整个窗口
Ctrl-w o
关闭其中一个(当前)窗口
Ctrl-w c //其实文件还在buffers中
让用缓冲区的文件来到分割窗口
Ctrl-w Ctrl-^ //保持Ctrl按下
3.4 保存所在目录的环境和状态,会话
如果在vim中已经打开了好多窗口,想要保持这个环境,等下次编辑浏览时再载入。
:help mksession 查看mksession的帮助
:mksession! 保存当前的vim状态,在当前目录会产生一个会话文件Session.vim。
$ vim -S vim会自动载入当前目录的会话文件Session.vim,之前:mksession! 保持的状态又回来啦。
:mksession! work.vim 保存当前的vim状态到会话文件work.vim
$ vim -S work.vim vim载入会话文件work.vim,之前:mksession! work.vim保持的状态又回来啦。
也可在vim中手动载入会话:
:source Session.vim 载入Session.vim保持的状态。
:source work.vim 载入work.vim保持的状态。
配置自动保存和载入会话
这个配置好后,第一次在要自动保持会话的目录下进入vim,用命令:mksession! project.vim。以后使用直接在当前目录$vim即可。
如果想打开和关闭vim时自动保存和载入会话,可以在配置文件~/.vimrc中加入:
" auto save and load session
let g:
let g:OrigPWD=getcwd()
if filereadable(g:AutoSessionFile)
if argc()==0
au VimEnter * call EnterHandler()
au VimLeave * call LeaveHandler()
endif
endif
function! LeaveHandler()
exec "mks! ".g:OrigPWD."/".g:AutoSessionFile
endfunction
function! EnterHandler()
exe "source ".g:AutoSessionFile
endfunction
参考vim中session自动保存及加载
4. 浏览代码:ctags,Taglist,NERD_tree,cscope
4.1 热门vim脚本
http://vim.sourceforge.net 下 scripts->browse all
4.2ctags跳转到定义处
ctags是一个用来产生代码索引文件的插件,支持很多语言。
可以用Ctrl-]命令跳转到函数的定义处,也可以用命令来搜索函数的定义,非常好用。
安装ctags
如果没有安装ctags,fedora的shell下可以用 # yum -y install ctags安装。
创建tags文件
shell下,在需要创建tags文件的目录下用 $ ctags -R,那么整个目录下的函数,宏,变量,类,结构等都加上了tags。
使用ctags
按键跳转Ctrl-],Ctrl-t,Ctrl-o
在创建tags文件的目录下,用vim打开的文件中,光标移到一个被调用的函数名上,按Ctrl-]就会自动跳转到该函数的定义处,Ctrl-t返回。
命令跳转 :tags functionname
在用vim打开的文件中,用命令:tags functionname。:ta functionname
打开时搜索并跳转
vim -t functionname
多个匹配tags时跳转
:tnext,:tprev,:tn,:tp
4.3Taglist函数和变量列表
Taglist是vim的源代码浏览插件,可以以窗口方式查看函数列表,变量列表等。
Taglist的实现依赖ctags。
安装Taglist
1. 在 http://www.vim-taglist.sourceforge.net/screenshots.html 下载最新版的Taglist软件包。
2. 在个人用户目录下创建 .vim目录,将taglist_**.zip中的内容解压到该目录。
3. 进入Vim,在命令模式下输入命令 " helptags ~/.vim/doc"即可完成Taglist的安装。
4. 输入命令“:Tlist”检查是否安装成功。
修改配置文件
let Tlist_File_Fold_Auto_Close=1 除了当前窗口显示的文件,其它文件折叠。
let Tlist_Exit_OnlyWindow=1 如果Tlist是最后一个窗口,自动退出vim。
使用 :Tlist
打开 Vim 之后,使用命令 :Tlist激活 Taglist窗口; 按Ctrl-w w在两个窗口来回跳转。
:Tlist
:TlistToggle
Tlist快捷键
在Tlist列表窗口中,以函数为例
看函数原型 空格
看函数定义 p
跳转到函数定义 移动到函数名处Enter
折叠/展开 - ,+
全部折叠/全部展开 =,*
更改列表排序方式 s
更新列表 u
放大缩小窗口 x
退出窗口 q
上/下一个文件 [[,]]
配置:Tlist快捷键
.vimrc中写:
nnoremap <silent><F2> :TlistToggle<CR>
Tlist帮助
在Tlist窗口按F1
:help Tlist 查看Tlist命令帮助
:help 'Tlist*' 查看Tlist选项帮助
:e ~/.vim/taglist.txt 直接打开文档看帮助
4.4 NERD_tree 目录树列表
安装NERD_tree
1.在vim.sourceforge.net 下载NERD_tree包。
2.把NERD_tree包解压到.vim下,之后会看到.vim下多了文件 doc/NERD_tree.txt,plugin/NERD_tree.vim。
3.进入vim,输入:NERDTree检查是否安装成功。
使用NERDTree
打开 vim 之后,使用命令 :NERDTree激活 NERDTree窗口; 按Ctrl-w w在两个窗口来回跳转。
:NERDTree
:NERDTreeToggle
NERDTree快捷键
o , Enter 展开/折叠目录
p 上一层目录
/ 查找文件
q 退出
帮助
?
:e ~/.vim/doc/NERD_tree.txt
忽略特定文件类型
配置文件中写:
let NERDTreeIgnore = ['.*\.o$','.*\.ko$','.*\.gz$'] 忽略后缀为.o,.ko,.gz的文件。
配置:NERDTree快捷键
.vimrc中写:
nnoremap <silent><F3> :NERDTreeToggle<CR>
4.5 bufexplorer 缓冲区文件列表
安装bufexplorer类似NERD_tree。
使用BufExplorer
:BufExplorer
配置:BufExplorer快捷键
.vimrc中写:
nnoremap <silent><F4> :BufExplorer<CR>
4.6cscope在整个目录查找函数被调用位置
cscope可以在整个目录查找函数定义,查找函数被调用位置等,非常好用。
安装cscope
fedora下,# yum -y install cscope
生成cscope数据库
在所要的目录下
$ find . -name '*.c' -or -name '*.h' -or -name '*.S' | cscope -Rbq
在当前目录会产生3个文件cscope.out,cscope.in.out,cscope.po.out。
载入cscope数据库
在当前目录进入vim
:cs add cscope.out
使用cscope查找整个目录
:cs help
:cs find g timer_interrupt 查找timer_interrupt的定义
:cs find c timer_interrupt 查找调用timer_interrupt的地方
:cs find e run_timer 查找关键字run_timer
find 可以简写为f
多个匹配间跳转
:cnext,cn
修改配置文件
set nocst 让跳转到定义的命令:ta 和 Ctrl-]调用ctags的tag,帮助:help nocst。
set csto=1 优先使用ctags的tag
"set cscopequickfix=s-,c-,d-,i-,t-,e- 使:cs find c 时直接跳转而不是列表,看个人喜好要不要设这个。
nnoremap <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR> 光标放在函数上,快捷键Ctrl-\跳转到调用这个函数的地方。
nnoremap <C-_> :cs find g <C-R>=expand("<cword>")<CR><CR> 光标放在函数上,快捷键Ctrl-_跳转到函数定义处或列出多个定义
5. 编译并修改代码错误
quickfix模式内置在vim中,编译后记录了出错的位置信息,用来定位错误位置。
编译
调用当前目录下的Makefile文件编译 :make
改变编译调用的命令 :set makeprg=gcc\ -g\ test.c\ -o\ test ,没有写Makefile时用
快速定位代码错误
列出错误 :cl
下一个错误 :cn
上一个错误 :cp
从头开始 :cnew
打开错误列表窗口 :cw
关闭错误列表窗口 :ccl
6. 调用gdb来debug:vimgdb
安装vimgdb
vimgdb需要以补丁形式打在vim版本上,下载vim的source,对应版本的vimgdb补丁,然后按vimgdb的说明文件安装即可。
配置按键映射
配置文件里加 map <F7> :run macros/gdb_mappings.vim<CR>
这样按F7,按键映射就可以在调试模式和普通模式切换了。
使用vimgdb
按键映射 <F7> 或 :run macros/gdb_mappings.vim
打开gdb命令窗格 空格
打开gdb输出窗格 在命令窗格键入gdb,按Enter
载入可执行文件 空格打开gdb命令窗格,file test,test就是编译后生成的可执行文件
设置断点 Ctrl-B
开始运行 R
继续执行 S,Ctrl-N,C
结束 F
退出 Q
变量监视窗口
创建变量监视窗 :bel 30vsplit gdb-variables
选中变量名到监视窗 v命令选中变量,Ctrl-P添加到变量监视窗格
输入变量名到监视窗 空格打开gdb命令窗格,输入createvar 变量名
在gdb输出窗格显示,查看
locals变量 L,info locals
函数stack W,where
断点位置 B,info breakpoints
寄存器 info registers
参考:vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb
7. 其它
7.1 中文乱码问题
先安装运行zhcon
8. 我的vim
安装了插件ctags,cscope,脚本Taglist,NERD_tree,bufexplorer,
按这里配置好之后,F2弹出函数列表,F3弹出目录列表,Ctrle-],Ctrl--跳转到函数定义,Ctrl-\跳转到函数引用,很方便。
我的配置文件~/.vimrc
---------------------------------------------------------------------
1 syntax on
2
3 set nu
4 set autoindent
5 set cindent
6
7 " status line
8 set statusline+=%f
9 set laststatus=2
10
11 nnoremap <silent><F2> :TlistToggle<CR>
12 nnoremap <silent><F3> :NERDTreeToggle<CR>
13 nnoremap <silent><F4> :BufExplorer<CR>
14
15 " cscope
16 set nocst
17 set csto=1
18 nnoremap <C-\> :cscope find c <C-R>=expand("<cword>")<CR><CR>
19 nnoremap <C-_> :cscope find g <C-R>=expand("<cword>")<CR><CR>
20 "set cscopequickfix=s-,c-,d-,i-,t-,e-
21
22 " Tlist
23 let Tlist_File_Fold_Auto_Close=1
24 let Tlist_Exit_OnlyWindow=1
25 let Tlist_WinWidth=30
26 let Tlist_Inc_Winwidth=1
27
28 " NERDTree
29 let NERDTreeIgnore = ['.*\.o$','.*\.ko$','.*\.gz$']
30
31 " auto save and load session
32 let g:
33 let g:
34 let g:OrigPWD=getcwd()
35 if filereadable(g:AutoSessionFile)
36 if argc()==0
37 au VimEnter * call EnterHandler()
38 au VimLeave * call LeaveHandler()
39 endif
40 endif
41 function! LeaveHandler()
42 exec "mks! ".g:OrigPWD."/".g:AutoSessionFile
43 endfunction
44 function! EnterHandler()
45 exe "source ".g:AutoSessionFile
46 endfunction
47
48 map <F7> :run macros/gdb_mappings.vim<CR>
【转】vim中多标签和多窗口的使用的更多相关文章
-
vim中多标签和多窗口的使用
用vim进行编辑的时候常常因为要编辑多个文件或者是编辑一个文件要参考其他文件而烦恼,这里介绍两种方法: 1.多标签 直接在编辑的时候输入: vim -p 要编辑的文件名 如vim -p * 就是编辑当 ...
-
vim中project多标签和多窗口的使用
1.打开多个窗口 打开多个窗口的命令以下几个: 横向切割窗口 :new+窗口名(保存后就是文件名) :split+窗口名,也可以简写为:sp+窗口名 纵向切割窗口名 :vsplit+窗口名,也可以简写 ...
-
再谈vim中多窗口的编辑
参考:http://blog.csdn.net/shuangde800/article/details/11430659 很好 鼠标在各个窗口间循环移动: ctrl+w+(小写的 hjkl), &qu ...
-
vim 多标签和多窗口
多文件编辑时的利器啊.谁用谁知道. 多标签 一次性以标签的形式打开多个文件: vim -p *.cpp :tabnew 增加一个标签 :tabc 关闭当前的tab :tabo ...
-
再谈vim中多窗口的编辑 ctrl+w+H窗口位置最大化和互换等操作
参考:http://blog.csdn.net/shuangde800/article/details/11430659 很好 鼠标在各个窗口间循环移动: ctrl+w+(小写的 hjkl), &qu ...
-
Jquery获取iframe子/父窗口中的标签
获取子窗口中的标签: $("#id",document.frames('iframename').document); 获取父窗口中的标签: $('#id', parent.doc ...
-
网页中<;a>;标签新窗口和location.href 新窗口打开
在网页制作过程中,经常遇到新窗口打开,一般是a超级链接或者location.href 新窗口打开形式,下面分别讲述两种之间的不同方式 1,a标签 新窗口 添加属性 target="_blan ...
-
解决vim中鼠标右键无法复制的问题
转:http://www.cnblogs.com/jianyungsun/archive/2011/03/19/1988855.html 这是我的vim配置文件:jeffy-vim-v2.4.tar ...
-
VIM中的寄存器简介
原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴.后来看了<vim实用技巧>上关于vi ...
随机推荐
-
Zookeeper全解析——Paxos作为灵魂(转)
原计划在介绍完ZK Client之后就着手ZK Server的介绍,但是发现ZK Server所包含的内容实在太多,并不是简简单单一篇Blog就能搞定的.于是决定从基础搞起比较好. 那么ZK Serv ...
-
JS获取屏幕高度
主要使用了document对象关于窗口的一些属性,这些属性的主要功能和用法如下. 要 得到窗口的尺寸,对于不同的浏览器,需要使用不同的属性和方法:若要检测窗口的真实尺寸,在netscape下需要使用w ...
-
mac homebrew PHP
启动PHP p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "Andale Mono"; color: #29f914; ...
-
APP常用模块
2016年上半年 APICloud合作云服务商提供了各种类型模块多达45个 其中最新发布的重要模块有 美洽客服模块 亲加视频直播相关模块 保利威视视频播放器模块 苹果银联支付模块 贝宝支付模块 谷歌分 ...
-
我的小前端 (1)—— 安卓机和ios机的区别
没有什么特别新技术,就是记录我做移动端遇到的问题 2016-02-16 微信,支付宝和APP都会遇到这些问题 一.安卓机和ios机的区别 1.常用 <head> <me ...
-
第十九节,基本数据类型,集合set
集合set,无序,是不允许重复内容的,也就是不允许重复元素,如果有重复,会自动忽略,可接收可迭代类型 (一般用于需要判断和处理交集时候用到) 集合与字典的区别是,集合没有键只有值,字典是有键的字典是一 ...
-
微信小程序简述
最近在公司实习,经理要求做一个微信小程序,晚上闲时来写一下. 微信小程序问世没多久,但毋庸置疑的是在不久的将来,它可以替代掉很多的APP.个人认为它的优势在于占用资源少,可以做到即用即走,对于一些使用 ...
-
基于open62541的opc ua 服务器开发实现(1)
关于opcua的介绍这里就不多说了,相信大家大都有了一些了解,open62541是一个开源C(C99)的opc-ua实现,开源代码可在官网或github上下载. 话不多说,首先搭建一个opcua服务器 ...
-
nginx做yum源
我这边环境是原先有个nginx只是做了代理转发,现在需要在通过nginx做yum源方便后期安装源 1.原先的配置代理转发,为不影响原先配置及端口,在http中最末尾加“include include ...
-
02、natapp的使用
使用方法 官网: https://natapp.cn 命令启动:natapp -authtoken=***************** 文档:https://natapp.cn/article/nat ...