Vim使用指北

这个东西呢,是个Vim的简易学习笔记兼教程,原创哦~(我自己的博客当然都是原创作品,嘿嘿)但是配置是网上借鉴的哈。

Posted by LXY on February 12, 2020

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>"