常见使用操作
代码自动对齐:gg=G
全选:ggVG
复制到系统剪切板:先ggVG全选,然后“+y复制(引号、加号不能少)
系统剪切板复制到vim:shift+ctrl+v(或者设置vim与系统共享剪切板)
翻页:ctrl + f (向下) ctrl+b(向上)
vim中从系统函数跳转到相应man文档:(命令模式下)光标移动到函数,按(n)K(shift+k),若要指定man第几章先按章节序号n
显示宏定义信息 光标移动到宏上按[d
% 跳转到配对的括号去
[[ 跳转到代码块的开头去(但要求代码块中’{‘必须单独占一行)
gD 跳转到局部变量的定义处
‘’ 跳转到光标上次停靠的地方, 是两个’, 而不是一个"
ctrl+R 搜索历史命令
vim括号匹配和跳转技巧:http://blog.youkuaiyun.com/caisini_vc/article/details/38351133
%:跳转到匹配的括号
多行注释:
- 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
- 在行首使用上下键选择需要注释的多行;
- 按下键盘(大写)“I”键,进入插入模式;
- 然后输入注释符(“//”、“#”等);
- 最后按下“Esc”键。
注:在按下esc键后,会稍等一会才会出现注释
删除多行注释:
- 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
- 选定要取消注释的多行;
- 按下“x”或者“d”.
vim 打开多文件 https://blog.youkuaiyun.com/derkampf/article/details/72629875
:bn(ext) 切换下一个
:bp(re) 切换上一个
vim-tabe多标签切换
vim -p 打开多文件在一个窗口,多标签
gt切换
https://www.cnblogs.com/liqiu/archive/2013/03/26/2981949.html
当前行作为屏幕第一行:zt(或z 回车)
zz(或z.) 将光标所在行移动到屏幕中间
zb(或z-) 将光标所在行移动到屏幕低端
https://blog.youkuaiyun.com/u011729865/article/details/50196737
工作模式:
1. 命令模式 – 打开文件之后, 默认进入命令模式
2. 编辑模式 – 需要输入一些命令, 切换到编辑模式
3. 末行模式 – 在末行模式下可以输入一些命令
-
vim编辑器的使用
命令模式下的操作:1>. 光标的移动 H J K L 前 下 上 后 移动光标到下一个单词:w 移动光标到上一个单词:b 移动到行首: 0 移动到行尾: $ 文件开始位置:gg 文件末尾:G 移动到第n行:nG、ngg 向下移动n行:n<Enter> 向后移动n个字符:n<Space> 移动光标到屏幕的首行:H 移动光标到屏幕的中间一行:M 移动光标到屏幕的尾行:L 2>. 删除操作 删除光标后(前)边的字符: x(X) 删除单词: dw (光标移动到单词的开始位置, 否则只能删除一部分) 删除光标到行首的字符串: d0 .........行尾.......: D(d$) 删除光标当前行: dd 删除多行: ndd (n -- 自然数) 向上删除直到第一行:dgg 向下删除直到最后一行:dG 删除当前行到第n行的所有内容:dnG 3>. 撤销操作 撤销: u 反撤销: ctrl + r 4>. 复制粘贴 复制: yy 复制多行: nyy 粘贴: p (光标所在行的下一行) 粘贴: P (光标所在行) 剪切 == 删除 5>. 可视模式 切换到可是模式: v 选择内容: hjkl 操作: 复制: y 删除: d 6>. 查找操作 1). /hello 2). ?hello 3). # -- 把光标移动到查找的单词身上 , 按# 遍历时候的快捷键: N/n 7>. r: 替换当前字符 缩进: 向右: >> 向左: << 8>. 查看man文档
文本模式下的操作:
切换到文本模式:a -- 在光标所在位置的后边插入 A -- 在当前行的尾部插入 i -- 在光标所在位置的前边插入 I -- 在光标所在行的行首插入 o -- 在光标所在行的下边开辟一个新的行 O -- .............上......... s -- 删除光标后边的字符 S -- 删除光标所在的行
末行模式下的操作:
查找: :s/tom/jack/g :%s/tom/jack/ :20,25s/tom/jack/g 保存退出: q: 退出 q!: 退出不保存 w: 保存 wq: 保存退出 x: == wq
在命令模式下保存退出: ZZ
分屏操作:
1>. 水平分屏
2>. 垂直分屏
Vim简单实用配置:
set nocompatible "抛弃vi
set number "显示行号
set mouse=c "开启鼠标
syntax on "语法高亮
set hlsearch "搜索结果高亮显示
set clipboard=unnamed
set tags=tags;
set autochdir
set ts=4
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smartindent
set expandtab
set foldenable "开启代码折叠
set foldlevel=4 "折叠最大4层
set foldmethod=indent
" 按F8按钮,在窗口的左侧出现taglist的窗口,像vc的左侧的workpace
nnoremap <silent> <F8> :TlistToggle <CR>
" :Tlist 调用TagList
let Tlist_Auto_Open=1
let Tlist_Show_One_File=1 " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow=1 "如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window=0 " 在右侧窗口中显示
let Tlist_SHow_Menu=1
let Tlist_File_Fold_Auto_Close=0 " 自动折叠
filetype plugin indent on
"cscope
if has("cscope") && filereadable("/usr/bin/cscope")
set cscopetag " 使支持用 Ctrl+] 和 Ctrl+t 快捷键在代码间跳来跳去
" check cscope for definition of a symbol before checking ctags:
" set to 1 if you want the reverse search order.
set csto=0
" add any cscope database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB !=""
cs add $CSCOPE_DB
else
let cscope_file=findfile("cscope.out", ".;")
let cscope_pre=matchstr(cscope_file, ".*/")
"let cscope_pre = system("pwd")
"let cscope_pre = strpart(cscope_pre,0,strlen(cscope_pre) - 1)
if !empty(cscope_file) && filereadable(cscope_file)
exe "cs add" cscope_file cscope_pre
endif
endif
" show msg when any other cscope db added
set cscopeverbose
nmap <C-/>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-/>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-/>d :cs find d <C-R>=expand("<cword>")<CR><CR>
endif
" ctags自动更新
function! UpdateCtags()
let curdir=getcwd()
while !filereadable("./tags")
cd ..
if getcwd() == "/"
break
endif
endwhile
if filewritable("./tags")
!ctags -R --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --fields=+iaS --extra=+q
TlistUpdate
endif
execute ":cd " . curdir
endfunction
autocmd BufWritePost *.c,*.h,*.cpp call UpdateCtags()
"解决复制到vim缩进错乱
set pastetoggle=
https://www.douban.com/note/233264337/
http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html
http://pizn.github.io/2012/03/03/vim-commonly-used-command.html
http://blog.youkuaiyun.com/ithomer/article/details/5929428