控制台运行 vimtutor 这是 vim 官方实操教程
三种模式:
- 一般模式
- 编辑模式
- 命令行模式
光标的移动
单词级
- w or W 向移动到下一单词开头 ★★
- b or B 向左移动到单词开头 ★★
块级
-
gg
文档第一行,相当于1G ★★★ -
G
文档最后一行,<n>G
移动到你n行 ★★ -
0
或home
到行首(第1列) ★★ -
$
或end
到行尾 ★ -
:<N>
or<n>gg
跳转到第N行 ★★★ -
ctrl-f
屏幕向下移动一页 -
ctrl-b
屏幕向上移动一页 -
<n>j
或者<n>↓
,向下移动n行,同理,也可以实现左右移动 ★★★ -
v
或者V
,字符选择或者行选择 ★★★ -
ctrl-v
长方形选择,牛逼了 ★★★
注意,所有命令都可以加一个数字N,表示对后面的命令执行N次,比如
<n>G
表示移动到第n行。
高级移动
-
'.
跳到最后修改的那一行 -
gd
跳到当前变量在当前文件的定义处,其实是跳转到当前变量在此文件中第一次出现的地方,不过一般来说,第一次出现的地方也就是变量定义的地方 ★★★ -
ma
在当前位置做标记,用字母a标记当前光标所在位置,这里a可以是任意字母 -
`a
跳到标记a处 ★★ - `` 跳到上一次光标所在处,相当有用 ★★★
打开文件、查找内容
vim中打开文件
-
:e <filename>
,在vim中打开名为filename的文件,如果没有,则创建;
文档内查找
匹配查找
vim 中可以使用 %
对 (
和 )
,[
和 ]
,{
和 }
进行匹配查找,当光标位于其中一个 符号上时,按下 %
,光标会跳到与之匹配的另外一个符号上。
括号匹配,程序员必备
文档的修改与保存
插入
-
a
当前字符后插入 ★★★ -
I
行首插入 -
A
行尾插入 -
o
在下一行插入 ★★★ -
O
在上一行插入 ★★★ -
ctrl-p
插入模式下进行单词补齐,比如有一个变量为fifth_test_day
,那么你只需要敲入部分名之后,就可以按下ctrl-p
自动补全了。★★★
删除
-
x
删除当前字符 -
X
向前删除一个字符,相当于键盘的Back Space
。 -
dd
删除当前行,并将删除内容保存在vim剪贴板ndd
表示删除光标所在的向下n行。★★ -
dw
删除光标所在位置到下个字的第一个字母 -
daw
删除一个单词,包括词尾空格,实用,不用将光标移动到单词第一个字母,aw
表示a word
-
d<X>
删除指定内容,保存在剪贴板 -
c<X>
删除指定内容,保存在剪贴板,同时进入insert模式
说明,<X>部分是对操作内容的描述,比如,删除一个单词,可以dw或者de,要复制当前位置到行尾内容,可以输入y$
,要删除后面3个字符并插入,就输入c3l
。
复制
-
yy
复制当前行到vim剪贴板nyy
复制光标向下n行 ★★★ -
y<X>
复制指定内容到剪贴板
粘贴
-
p
当前位置后粘贴 ★★★ -
P
在当前位置前粘贴
合并
-
J
当前行与下一行合并
替换
-
r<X>
将当前字符替换为X ★★★ -
:%s/search>/<replace>/
查找search内容并替换为replace内容,正则表达来替换,这个命令可以消除所有行位多余的空格::%s/\s\+$//
★★★ -
<n1>,<n2>s/word1/word2/gc
n1/n2都是数字,在n1
行和n2
行之间寻找word1
,替换为word2
。c
代表confirm
,替换前需要你确认,不加就默认全部替换。n2
用$
表示时,表示搜索到最后一行。★★★
撤销、重做
-
u
撤销 ★★★ -
ctrl-r
重做 ★★★ -
.
重复前一个操作的意思 ★★★
保存文件
编辑
-
ctrl-n
Vim自带的补全(按照全文已有输入)★★★
多窗口
设置vim
为了让vim使用起来更加得心应手,先做一些简单的配置。
编辑VIM配置文件,可能一开始没有这个文件,不过没关系,直接vi ~/.vimrc
保存这个文件即可。
简单设置vim:
set number """显示行号 set relativenumber """显示相对行号(这个非常重要,慢慢体会) set hlsearch """搜索结果高亮 set autoindent """自动缩进 set smartindent """智能缩进 set tabstop=4 """设置 tab 制表符所占宽度为 4 set softtabstop=4 """设置按 tab 时缩进的宽度为 4 set shiftwidth=4 """设置自动缩进宽度为 4 set expandtab """缩进时将 tab 制表符转换为空格 filetype on """开启文件类型检测 Syntax on """开启语法高亮
关于vim的配置,还可以看强大的vim配置文件,让编程更随意
重复上一次命令
vim有一个特殊的命令.
,你可以用它重复执行上一个命令。我感觉有点像EXCEL中的F4
命令。
缩进
-
>>
向右缩进当前行 -
<<
向左缩进当前行
分屏与标签页
分屏方式
-
:split
缩写sp
orctrl-w s
上下分屏 -
:vsplit
缩写vs
orctrl-w v
左右分屏 -
:diffsplit
缩写:diffs
diff模式打开一个分屏,后面可以加上{filename}
窗口跳转
-
ctrl-w w
激活下一个窗口 -
ctrl-w j
激活下方窗口 -
ctrl-w k
激活上方窗口 -
ctrl-w h
激活左侧窗口 -
ctrl-w l
激活右侧窗口
插件
添加 vim-plug 的配置到 ~/.vimrc
中:
这将会自动开启 filetype plugin indent on
和 Syntax enable
,如果不希望这 样,你可以在该配置后重置你的设置,例如:filetype indent off,Syntax off
安装vim-plug
先cd ~
,然后创建mkdir .vim
,接着执行如下命令:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
会在~/.vim文件夹下创建autoload文件夹,同时将下载的plug.vim文件归档到该文件夹下。
下面是官方对~/.vimrc
文件配置的一个Example:
" Specify a directory for plugins " - For Neovim: ~/.local/share/nvim/plugged " - Avoid using standard Vim directory names like 'plugin' call plug#begin('~/.vim/plugged') " Make sure you use single quotes " 注意要使用单引号 " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align " 如果插件在 GitHub 的地址是 https://github.com/junegunn/vim-easy-align " 可以缩写成下面这样 Plug 'junegunn/vim-easy-align' " Any valid git URL is allowed " 或者直接给定插件 git 地址 Plug 'https://github.com/junegunn/vim-github-dashboard.git' " Multiple Plug commands can be written in a single line using | separators " 多个 `Plug` 命令可以写在一行,用 `|` 符号分割 Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " On-demand loading Plug 'scrooloose/nerdtree',{ 'on': 'NERDTreetoggle' } Plug 'tpope/vim-fireplace',{ 'for': 'clojure' } " Using a non-master branch Plug 'rdnetto/YCM-Generator',{ 'branch': 'stable' } " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) Plug 'fatih/vim-go',{ 'tag': '*' } " Plugin options Plug 'nsf/gocode',{ 'tag': 'v.20150303','rtp': 'vim' } " Plugin outside ~/.vim/plugged with post-update hook Plug 'junegunn/fzf',{ 'dir': '~/.fzf','do': './install --all' } " Unmanaged plugin (manually installed and updated) Plug '~/my-prototype-plugin' " Initialize plugin system call plug#end()
vim-plug常用命令
常用命令
命令 | 说明 |
---|---|
PlugInstall [name ...] [#threads] | 安装插件 |
PlugUpdate [name ...] [#threads] | 安装或升级插件 |
PlugClean | 清理插件 |
PlugUpgrade | 升级 vim-plug |
PlugStatus | 查看已安装插件的状态 |
怎么使用这些命令呢?
直接vim
之后,进入冒号的命令模式,输入上述命令就可以执行命令了。
FAQ
Q:配置VIM,安装vim-plug插件之后,想要生效通过source ~/.vimrc
命令生效配置,就会报错:E492: Not an editor command: Plug
[root@localhost ~]# source .vimrc -bash: .vimrc: line 2: Syntax error near unexpected token `(' -bash: .vimrc: line 2: `call plug#begin('~/.vim/plugged')'
A:- error while running “source .vimrc”
原因是,我们.vimrc
本身并不是shell文件,而source ~/.vimrc
等价于./.vimrc
,当然后校验shell语法了。看了StackOverflow上的解答才清楚的。
- 可以通过输入
$vim
直接进入vim的命令模式,执行下面命令
:source ~/.vimrc
注意,我这里.vimrc
的位置就是位于~
目录下,你可以:source /path/to/.vimrc
- 或者编辑完
.vimrc
文件,直接:
:so $MYVIMRC
Q:从Win上复制文件时,常常因为换行符出错:
:set fileformat=unix
A:
linux的文件换行符为\n
,但windows却非要把\r\n
作为换行符,所以,vim在解析从windows拷贝到linux的的vimrc时,因为遇到无法解析的r,所以报错。
个人vim配置收藏
参考多人的配置,打造属于自己的Vim配置:
Syntax on " 自动语法高亮 set cursorline " 突出显示当前行 set hlsearch " 搜索时高亮显示被找到的文本 set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感 set incsearch " 输入搜索内容时就显示搜索结果 set laststatus=2 " 显示状态栏 (默认值为 1,无法显示状态栏) set magic " 设置魔术 set nocompatible " 关闭 vi 兼容模式 set number " 显示行号 set paste "解决拷贝的时遇到注释会自动注释后续所有行的问题 set ruler " 打开状态栏标尺 set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4 set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格 set smartindent " 开启新行时使用智能自动缩进 set tabstop=4 " 设定 tab 长度为 4
vim配置文件中的注释,末尾用"
隔开即可。保留注释,对于了解配置内容有利。
安装主题
从https://github.com/fatih/molokai 下载molokai.vim文件,放入~/.vim/colors
中。然后在~/.vimrc
文件中加入行colorscheme molokai
即可。
Vim配置参考
"my vim configuration begin set history=50 " keep 50 lines of command line history set incsearch " do incremental searching set showmatch " 设置匹配模式,类似当输入一个左括号时会匹配相应的右括号 set fileencodings=utf-8,ucs-bom,gbk18030,gbk,gb2312,cp936 set encoding=utf-8 "utf-8编码 set number "显示行号 set expandtab "tab自动扩展为空格 set tabstop=4 "tab宽度为4个空格 set shiftwidth=4 "设置缩进4个空格 set foldmethod=marker "设置按标志折叠 set showcmd "设置显示命令 set ignorecase "搜索忽略大小写,取消忽略 :set noic set hlsearch "搜索高亮 set linebreak "设置单词不跨行 set ruler "显示光标行列信息 Syntax enable "使能语法高亮 Syntax on "语法高亮 set cindent "cindent是特别针对 C语言语法自动缩进 set cinoptions={2,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s Syntax keyword Type_Error ERROR hi Type_Error ctermfg=1 " 关键字ERROR显示成红色 Syntax keyword Type_Warn WARN hi Type_Warn ctermfg=3 " 关键字WARN显示成黄色 Syntax keyword Type_Info INFO hi Type_Info ctermfg=2 " 关键字INFO显示成绿色 Syntax keyword Type_Debug DEBUG hi Type_Debug ctermfg=6 " 关键字DEBUG显示成蓝色 hi Search ctermfg=5 ctermbg=none " 搜索颜色 hi CursorLine ctermbg=236 cterm=none " 当前行颜色 "my vim configuration end
另外一个人的配置:
"========================================================================= " DesCRiption: 适合自己使用的vimrc文件,for Linux/Windows,GUI/Console " " Last Change: 2015年08月02日 15时13分 " " Version: 1.0.0 " "========================================================================= set nocompatible " 关闭 vi 兼容模式 Syntax on " 自动语法高亮 colorscheme molokai " 设定配色方案 set number " 显示行号 set cursorline " 突出显示当前行 set ruler " 打开状态栏标尺 set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4 set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格 set tabstop=4 " 设定 tab 长度为 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> " 用空格键来开关折叠 " return OS type,eg: windows,or linux,mac,et.st.. function! MySys() if has("win16") || has("win32") || has("win64") || has("win95") return "windows" elseif has("unix") return "linux" endif endfunction " 用户目录变量$VIMFILES if MySys() == "windows" let $VIMFILES = $VIM.'/vimfiles' elseif MySys() == "linux" let $VIMFILES = $HOME.'/.vim' endif " 设定doc文档目录 let helptags=$VIMFILES.'/doc' " 设置字体 以及中文支持 if has("win32") set guifont=Inconsolata:h12:cANSI endif " 配置多语言环境 if has("multi_byte") " UTF-8 编码 set encoding=utf-8 set termencoding=utf-8 set formatoptions+=mM set fencs=utf-8,gbk if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)' set ambiwidth=double endif if has("win32") source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim language messages zh_CN.utf-8 endif else echoerr "Sorry,this version of (g)vim was not compiled with +multi_byte" endif " Buffers操作快捷方式! nnoremap <C-RETURN> :bnext<CR> nnoremap <C-S-RETURN> :bprevIoUs<CR> " Tab操作快捷方式! nnoremap <C-TAB> :tabnext<CR> nnoremap <C-S-TAB> :tabprev<CR> "关于tab的快捷键 " map tn :tabnext<cr> " map tp :tabprevIoUs<cr> " map td :tabnew .<cr> " map te :tabedit " map tc :tabclose<cr> "窗口分割时,进行切换的按键热键需要连接两次,比如从下方窗口移动 "光标到上方窗口,需要<c-w><c-w>k,非常麻烦,现在重映射为<c-k>,切换的 "时候会变得非常方便. nnoremap <C-h> <C-w>h nnoremap <C-j> <C-w>j nnoremap <C-k> <C-w>k nnoremap <C-l> <C-w>l "一些不错的映射转换语法(如果在一个文件中混合了不同语言时有用) nnoremap <leader>1 :set filetype=xhtml<CR> nnoremap <leader>2 :set filetype=css<CR> nnoremap <leader>3 :set filetype=javascript<CR> nnoremap <leader>4 :set filetype=PHP<CR> " set fileformats=unix,dos,mac " nmap <leader>fd :se fileformat=dos<CR> " nmap <leader>fu :se fileformat=unix<CR> " use Ctrl+[l|n|p|cc] to list|next|prevIoUs|jump to count the result " map <C-x>l <ESC>:cl<CR> " map <C-x>n <ESC>:cn<CR> " map <C-x>p <ESC>:cp<CR> " map <C-x>c <ESC>:cc<CR> " 让 Tohtml 产生有 CSS 语法的 html " Syntax/2html.vim,可以用:runtime! Syntax/2html.vim let html_use_css=1 " Python 文件的一般设置,比如不要 tab 等 autocmd FileType python set tabstop=4 shiftwidth=4 expandtab autocmd FileType python map <F12> :!python %<CR> " 选中状态下 Ctrl+c 复制 vmap <C-c> "+y " 打开javascript折叠 let b:javascript_fold=1 " 打开javascript对dom、html和css的支持 let javascript_enable_domhtmlcss=1 " 设置字典 ~/.vim/dict/文件的路径 autocmd filetype javascript set dictionary=$VIMFILES/dict/javascript.dict autocmd filetype css set dictionary=$VIMFILES/dict/css.dict autocmd filetype PHP set dictionary=$VIMFILES/dict/PHP.dict "----------------------------------------------------------------- " plugin - bufexplorer.vim Buffers切换 " \be 全屏方式查看全部打开的文件列表 " \bv 左右方式查看 \bs 上下方式查看 "----------------------------------------------------------------- "----------------------------------------------------------------- " plugin - taglist.vim 查看函数列表,需要ctags程序 " F4 打开隐藏taglist窗口 "----------------------------------------------------------------- if MySys() == "windows" " 设定windows系统中ctags程序的位置 let Tlist_Ctags_Cmd = '"'.$VIMRUNTIME.'/ctags.exe"' elseif MySys() == "linux" " 设定windows系统中ctags程序的位置 let Tlist_Ctags_Cmd = '/usr/bin/ctags' endif nnoremap <silent><F4> :TlistToggle<CR> let Tlist_Show_One_File = 1 " 不同时显示多个文件的tag,只显示当前文件的 let Tlist_Exit_OnlyWindow = 1 " 如果taglist窗口是最后一个窗口,则退出vim let Tlist_Use_Right_Window = 1 " 在右侧窗口中显示taglist窗口 let Tlist_File_Fold_Auto_Close=1 " 自动折叠当前非编辑文件的方法列表 let Tlist_Auto_Open = 0 let Tlist_Auto_Update = 1 let Tlist_Hightlight_Tag_On_BufEnter = 1 let Tlist_Enable_Fold_Column = 0 let Tlist_Process_File_Always = 1 let Tlist_display_Prototype = 0 let Tlist_Compact_Format = 1 "----------------------------------------------------------------- " plugin - mark.vim 给各种tags标记不同的颜色,便于观看调式的插件。 " \m mark or unmark the word under (or before) the cursor " \r manually input a regular expression. 用于搜索. " \n clear this mark (i.e. the mark under the cursor),or clear all highlighted marks . " \* 当前MarkWord的下一个 \# 当前MarkWord的上一个 " \/ 所有MarkWords的下一个 \? 所有MarkWords的上一个 "----------------------------------------------------------------- "----------------------------------------------------------------- " plugin - NERD_tree.vim 以树状方式浏览系统中的文件和目录 " :ERDtree 打开NERD_tree :NERDtreeClose 关闭NERD_tree " o 打开关闭文件或者目录 t 在标签页中打开 " T 在后台标签页中打开 ! 执行此文件 " p 到上层目录 P 到根目录 " K 到第一个节点 J 到最后一个节点 " u 打开上层目录 m 显示文件系统菜单(添加、删除、移动操作) " r 递归刷新当前目录 R 递归刷新当前根目录 "----------------------------------------------------------------- " F3 NERDTree 切换 map <F3> :NERDTreetoggle<CR> imap <F3> <ESC>:NERDTreetoggle<CR> "----------------------------------------------------------------- " plugin - NERD_commenter.vim 注释代码用的, " [count],cc 光标以下count行逐行添加注释(7,cc) " [count],cu 光标以下count行逐行取消注释(7,cu) " [count],cm 光标以下count行尝试添加块注释(7,cm) ",cA 在行尾插入 /* */,并且进入插入模式。 这个命令方便写注释。 " 注:count参数可选,无则默认为选中行或当前行 "----------------------------------------------------------------- let NERdspaceDelims=1 " 让注释符与语句之间留一个空格 let NERDCompactSexyComs=1 " 多行注释时样子更好看 "----------------------------------------------------------------- " plugin - DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释 "----------------------------------------------------------------- let g:DoxygenToolkit_authorName="Asins - asinsimple AT gmail DOT com" let g:DoxygenToolkit_briefTag_funcName="yes" map <leader>da :DoxAuthor<CR> map <leader>df :Dox<CR> map <leader>db :DoxBlock<CR> map <leader>dc a /* */<LEFT><LEFT><LEFT> "----------------------------------------------------------------- " plugin – ZenCoding.vim 很酷的插件,HTML代码生成 " 插件最新版:http://github.com/mattn/zencoding-vim " 常用命令可看:http://nootn.com/blog/Tool/23/ "----------------------------------------------------------------- "----------------------------------------------------------------- " plugin – checkSyntax.vim JavaScript常见语法错误检查 " 默认快捷方式为 F5 "----------------------------------------------------------------- let g:checkSyntax_auto = 0 " 不自动检查 "----------------------------------------------------------------- " plugin - NeoComplCache.vim 自动补全插件 "----------------------------------------------------------------- let g:AutoComplPop_NotEnableAtStartup = 1 let g:NeoComplCache_EnableAtStartup = 1 let g:NeoComplCache_SmartCase = 1 let g:NeoComplCache_TagsAutoUpdate = 1 let g:NeoComplCache_EnableInfo = 1 let g:NeoComplCache_EnableCamelCaseCompletion = 1 let g:NeoComplCache_MinSyntaxLength = 3 let g:NeoComplCache_EnableSkipCompletion = 1 let g:NeoComplCache_SkipInputTime = '0.5' let g:NeoComplCache_SnippetsDir = $VIMFILES.'/snippets' " <TAB> completion. inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>" " snippets expand key imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand) smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand) "----------------------------------------------------------------- " plugin - matchit.vim 对%命令进行扩展使得能在嵌套标签和语句之间跳转 " % 正向匹配 g% 反向匹配 " [% 定位块首 ]% 定位块尾 "----------------------------------------------------------------- "----------------------------------------------------------------- " plugin - vcscommand.vim 对%命令进行扩展使得能在嵌套标签和语句之间跳转 " SVN/git管理工具 "----------------------------------------------------------------- "----------------------------------------------------------------- " plugin – a.vim "-----------------------------------------------------------------
vim配置总结
参考
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。