vim使用指南
1.两种模式
- 命令模式(command)
- 编辑模式(edit)
按一下i或者a可以进入编辑模式,按一下esc可以退出编辑模式。
2.基本操作
2.1 在终端打开vim
直接在终端输入vim可以直接进入vim。
在终端输入vim xxx.c可以用vim打开文件
2.2 在命令模式下保存并退出
在命令模式下输入:wq 文件名.后缀可以将代码保存至该文件,如果是打开某个文件去编辑的话,直接输入:wq就可以退出保存了。w代表保存(write),q代表退出(quit)。可单独使用。
在命令模式下输入:q!可以直接退出,不保存。(在未编辑的情况下不需要!)
ps:命令模式下的Esc的意思是清空命令。之前打的没执行的就没了。
2.3高亮语法(像vs那样子)和行号
我的vim是默认开启的 。
| 代码 | 作用 |
|---|---|
syntax on |
启动高亮 |
set number |
启动行号 |
如果不是默认开启的话,可以在终端输入vim ~./vimrc进行配置。进入过后吧下列代码敲进去,然后保存退出。
syntax on
set number
Ps:这里可以去github上面找大佬的配置复制进来。
3.辅助功能
3.1移动
上下左右键可以移动。
命令模式下:
| 按键 | 作用 |
|---|---|
| H | 左 |
| J | 下 |
| K | 上 |
| L | 右 |
| W | 向后跳一个单词(word) |
| B | 向前跳一个单词(back) |
| PageUp (PgUp)或Ctrl + B | 向上翻页(forward) |
| PageDown (PgDn) 或Ctrl + F | 向下翻页(backward) |
| 数字+gg | 直接跳到某行 |
| 数字+H 或 J 或 K 或 L | 向左上下右跳多少行 |
3.2 查找
命令模式输入/xxx会进行高亮标记xxx。
N 可以搜索下一个。
Shift +N可以搜索上一个。
找到了过后按Esc退出之后按i进入编辑模式。
3.3 删除
编辑模式下使用Backspace(仿佛是一句废话)
命令模式下dd可以删除那一行。
命令模式下d2d可以连续删除2行,中间数字自己融会贯通。
如果你删错了的话,命令模式下u撤销
3.4 裁剪复制粘贴
命令模式下cc可以裁剪那一行。
命令模式下c2c可以连续裁剪2行,中间数字自己融会贯通。
命令模式下yy可以复制那一行。
命令模式下y2y可以连续复制2行,中间数字自己融会贯通。
命令模式p可以粘贴。
撤销仍然是u
3.5 VISUAL模式
移动的话会选中一片代码,选择的话可以进行删除d,复制y,裁剪c,
4.插件
内置的自动补全是Ctrl+N,缺点是只能补全已经出现过的词汇。
为了让他更智能,我们要安装第三方插件。
4.1 插件安装
vim plug:自动补全,建议百度,可参考GitHub: https://github.com/junegunn/vim-plug
vim awesome:一个找插件的网站
如果报错可能是没装git
5.我的配置
"设置leader为
let mapleader=","
let g:mapleader=","
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936,gb18030
set tabstop=4
set expandtab
set softtabstop=2
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
filetype plugin indent on " 开启插件
set number " 显示行号
set nocursorline " 不突出显示当前行
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set nobackup " 覆盖文件时不备份
set nowb
set autochdir " 自动切换当前目录为当前文件所在的目录
set backupcopy=yes " 设置备份时的行为为覆盖
" set autoread " set to auto read when a file changed from the outside
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍大小写敏感
" set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
set matchtime=2 " 短暂跳转到匹配括号的时间
" set nowrap " 不自动换行
set magic " 显示括号配对情况
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start
" 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=1 " 显示状态栏 (默认值为 1, 无法显示状态栏)
" set foldenable " 开始折叠
" set foldmethod=syntax " 设置语法折叠
" set foldcolumn=0 " 设置折叠区域的宽度
" setlocal foldlevel=1 " 设置折叠层数为
" set foldclose=all " 设置为自动关闭折叠
" colorscheme colorzone " 设定配色方案
set background=dark
" colorscheme solarized " 设定配色方案
colorscheme desert " 设定配色方案
" set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %c:%l/%L%)\
" 设置在状态行显示的信息
" 显示Tab符
set nolist
set listchars=tab:>-,trail:-
" 设置鼠标
" set mouse=a
"设置代码折叠方式为 手工 indent
"set foldmethod=indent
"设置代码块折叠后显示的行数
set foldexpr=1
"编辑vim配置文件
set fileformats=unix,dos,mac
nmap <Leader>e :tabnew $HOME/.vimrc<CR>
let $VIMFILES = $HOME.'/.vim'
set tags+=~/.vim/tags/cpp
set tags+=~/.vim/tags/gl
set tags+=~/.vim/tags/sdl
set tags+=~/.vim/tags/qt4
set tags+=./tags,../tags,./../tags,./../../tags,./../../../tags,./../../../../tags,./../../../../../tags,./../../../../../../tags,./../../../../../../../tags,./../../../../../../../../tags,./../../../../../../../../../tags,./../../../../../../../../../../tags
"build tags of your own project with Ctrl-F12
"map <C-F12> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
"0mniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
let OmniCpp_MayCompleteDot = 1 " autocomplete after .
let OmniCpp_MayCompleteArrow = 1 " autocompleute after ->
let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
autocmd FileType python setlocal et sta sw=4 sts=4
"不同文件类型的缩进
au FileType html,python,vim,javascript,phtml setl shiftwidth=2
au FileType html,python,vim,javascript,phtml setl tabstop=2
au FileType java,php setl shiftwidth=4
au FileType java,php setl tabstop=4
set completeopt=longest,menu
"自动加载树目录
nmap <F1> :NERDTreeToggle<CR>
"taglist
let Tlist_Ctags_Cmd='/usr/local/bin/ctags'
let Tlist_Show_One_File=1
let Tlist_OnlyWindow=1
let Tlist_Use_Right_Window=1
let Tlist_Sort_Type='name'
let Tlist_Exit_OnlyWindow=1
let Tlist_Show_Menu=1
let Tlist_Max_Submenu_Items=10
let Tlist_Max_Tag_length=20
let Tlist_Use_SingleClick=0
let Tlist_Auto_Open=0
let Tlist_Close_On_Select=0
let Tlist_File_Fold_Auto_Close=1
let Tlist_GainFocus_On_ToggleOpen=1
let Tlist_Process_File_Always=1
let Tlist_WinHeight=10
let Tlist_WinWidth=45
let Tlist_Use_Horiz_Window=0
nmap <F3> :Tlist<CR>
" java支持
" http://www.cnblogs.com/wds128/p/4479941.html
setlocal omnifunc=javacomplete#Complete
autocmd FileType java set omnifunc=javacomplete#Complete
autocmd FileType java set completefunc=javacomplete#CompleteParamsInf
autocmd FileType java inoremap <expr><CR> pumvisible()?"\<C-Y>":"<CR>"