vim 常用指令

目录

帮助

模式

移动

Normal模式字符操作

删除复制黏贴

块操作

重复操作

搜索

文件操作

分屏

功能指令

范例

Vim 配置


  • :help <command>:帮助文档
  • Ctrl+n 或者 Ctrl+p:自动补齐

模式

  • i:插入模式
  • a:在光标后输入
  • o:在当前行后插入一个新行
  • O:在当前行前插入一个新行
  • ESC:返回Normal模式

移动

  • hjkl:移动光标
  • 0:数字零,到行头
  • $:到本行行尾
  • ^:到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
  • g_:到本行最后一个不是blank字符的位置
  • :N:到第N行
  • gg:第一行
  • G:最后一行
  • w:到下一个单词的开头
  • e:到下一个单词的结尾
  • %:匹配括号移动
  • *:移动光标到下一个匹配单词
  • #:移动光标到上一个匹配单词
  • fa: 到下一个为a的字符处;F反向
  • t,:到逗号前的第一个字符;T反向

Normal模式字符操作

  • x:删除当前光标所在的一个字符
  • u:撤销
  • Ctrl+r:重做

删除复制黏贴

  • d:删除
  • p:黏贴;P在当前位置之前粘贴剪贴板
  • **p:复制指定寄存器中的内容(:reg 查看寄存器中的内容,比如 ”0p 复制 “0 寄存器中的内容)
  • y:复制
  • dd pp yy:对当前行进行删除,黏贴和复制
  • :set paste:设置黏贴模式,可以快速的解决黏贴过程中多次换行造成格式混乱的问题(:set nopaste 可以取消黏贴模式)

块操作

  • vi":选择双引号之内的字符;v2i" 两个双引号之内的字符
  • va":选择双引号之间的字符(包含双引号);同上

Text objects selection

  • Ctrl + v:对某块字符执行相同的操作,见范例
  • J:将多行连接变成一行
  • shift + < >:左右缩进
  • =:自动缩进

重复操作

  • .:重复上一次操作
  • N<command>:重复某个指令N次,比如 2dd,3p

搜索

  • /pattern: 搜索pattern的字符串(如果搜索出多个匹配,可按n键到下一个,N上一个)
  • shift *:移动到需要查找单词的首字母上,shift * 即可快速搜索该单词
  • :noh:搜索之后取消高亮

文件操作

  • :w:存盘,可以跟文件名
  • :q:退出
  • :e:打开文件
  • :saveas:另存为

分屏

  • vim -On file1  file2:垂直分屏
  • vim -on file1 file2:水平分屏
  • Ctrl+w c:关闭当前窗口
  • :sp file1:上下分割,打开一个文件
  • :vsp file1:左右分割,打开一个文件
  • Ctrl+w jkhl:在多个分屏中移动光标

功能指令

  • :set invlist / :set nolist:显示和取消显示不可见字符,其中 ^I 标识 Tab,$ 表示回车
  • :set expandtab:将 tab 键替换为空格
  • :set ts=4:设置 tab 键对应四个空格长度

范例

  • 0y$:到行头,从这里开始拷贝,拷贝到本行最后一个字符
  • dt":删除所有的内容,直到遇到双引号
  • 0 Ctrl+v Ctrl+d I--:在某块区域前面添加 --

Rectangular blocks

Vim 配置

vim的配置文件位置有以下三个

  • system vimrc file: "$VIM/vimrc" 或 /etc/vim/vimrc (所有用户的都将被修改,不建议修改)
  • user vimrc file: "$HOME/.vimrc" 或 /usr/share/vim/vimrc (Debian 为 /etc/vim/vimrc 的链接文件)
  • user vimrc file: "~/.vimrc" (一般不存在,可以自己创建)

下面给出一个较好配置文件

" CRiption: \u9002\u5408\u81EA\u5DF1\u4F7F\u7528\u7684vimrc\u6587\u4EF6\uFF0Cfor Linux/Windows, GUI/Console
"
" Last Change: 2010\u5E7408\u670802\u65E5 15\u65F613\u5206 
"
" Version:     1.80
"
"=========================================================================

set nocompatible            " \u5173\u95ED vi \u517C\u5BB9\u6A21\u5F0F
set diffopt=filler,iwhite,
set diffexpr=MyDiff()
set autowrite
function MyDiff()
    let opt = ""
    if &diffopt =~ "icase"
        let opt = opt . "-i "
    endif
    if &diffopt =~ "iwhite"
        let opt = opt . "-b "
    endif
    silent execute "!diff -a --binary -w " . opt . v:fname_in . " " . v:fname_new .
                \  " > " . v:fname_out
endfunction

syntax on                   " \u81EA\u52A8\u8BED\u6CD5\u9AD8\u4EAE
"colorscheme molokai         " \u8BBE\u5B9A\u914D\u8272\u65B9\u6848
set number                  " \u663E\u793A\u884C\u53F7
"set cursorline              " \u7A81\u51FA\u663E\u793A\u5F53\u524D\u884C
set ruler                   " \u6253\u5F00\u72B6\u6001\u680F\u6807\u5C3A
set expandtab
set shiftwidth=4            " \u8BBE\u5B9A << \u548C >> \u547D\u4EE4\u79FB\u52A8\u65F6\u7684\u5BBD\u5EA6\u4E3A 4
set softtabstop=4           " \u4F7F\u5F97\u6309\u9000\u683C\u952E\u65F6\u53EF\u4EE5\u4E00\u6B21\u5220\u6389 4 \u4E2A\u7A7A\u683C
set tabstop=4               " \u8BBE\u5B9A tab \u957F\u5EA6\u4E3A 4
set nobackup                " \u8986\u76D6\u6587\u4EF6\u65F6\u4E0D\u5907\u4EFD
" set autochdir               " \u81EA\u52A8\u5207\u6362\u5F53\u524D\u76EE\u5F55\u4E3A\u5F53\u524D\u6587\u4EF6\u6240\u5728\u7684\u76EE\u5F55
filetype plugin on          " \u5F00\u542F\u63D2\u4EF6
set backupcopy=yes          " \u8BBE\u7F6E\u5907\u4EFD\u65F6\u7684\u884C\u4E3A\u4E3A\u8986\u76D6
set ignorecase smartcase    " \u641C\u7D22\u65F6\u5FFD\u7565\u5927\u5C0F\u5199\uFF0C\u4F46\u5728\u6709\u4E00\u4E2A\u6216\u4EE5\u4E0A\u5927\u5199\u5B57\u6BCD\u65F6\u4ECD\u4FDD\u6301\u5BF9\u5927\u5C0F\u5199\u654F\u611F
set nowrapscan              " \u7981\u6B62\u5728?\u7D22\u5230\u6587\u4EF6\u4E24\u7AEF\u65F6\u91CD\u65B0?\u7D22
set incsearch               " \u8F93\u5165\u641C\u7D22\u5185\u5BB9\u65F6\u5C31\u663E\u793A\u641C\u7D22\u7ED3\u679C
set hlsearch                " \u641C\u7D22\u65F6\u9AD8\u4EAE\u663E\u793A\u88AB\u627E\u5230\u7684\u6587\u672C
set noerrorbells            " \u5173\u95ED\u9519\u8BEF\u4FE1\u606F\u54CD\u94C3
set novisualbell            " \u5173\u95ED\u4F7F\u7528\u53EF\u89C6\u54CD\u94C3\u4EE3\u66FF\u547C\u53EB
set t_vb=                   " \u7F6E\u7A7A\u9519\u8BEF\u94C3\u58F0\u7684\u7EC8\u7AEF\u4EE3\u7801
set showmatch               " \u63D2\u5165\u62EC\u53F7\u65F6\uFF0C\u77ED\u6682\u5730\u8DF3\u8F6C\u5230\u5339\u914D\u7684\u5BF9\u5E94\u62EC\u53F7
set matchtime=2             " \u77ED\u6682\u8DF3\u8F6C\u5230\u5339\u914D\u62EC\u53F7\u7684\u65F6\u95F4
set magic                   " \u8BBE\u7F6E\u9B54\u672F
set hidden                  " \u5141\u8BB8\u5728\u6709\u672A\u4FDD\u5B58\u7684\u4FEE\u6539\u65F6\u5207\u6362\u7F13\u51B2\u533A\uFF0C\u6B64\u65F6\u7684\u4FEE\u6539\u7531 vim \u8D1F\u8D23\u4FDD\u5B58
set smartindent             " \u5F00\u542F\u65B0\u884C\u65F6\u4F7F\u7528\u667A\u80FD\u81EA\u52A8\u7F29\u8FDB
set backspace=indent,eol,start
set mouse=v
set wildmenu
" \u4E0D\u8BBE\u5B9A\u5728\u63D2\u5165\u72B6\u6001\u65E0\u6CD5\u7528\u9000\u683C\u952E\u548C Delete \u952E\u5220\u9664\u56DE\u8F66\u7B26

set tags=./tags
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let Tlist_Use_Right_Window=1 
let g:winManagerWindowLayout='FileExplorer'

let mapleader = ","
let b:tablify_delimiter = "	"
let b:tablify_cellLeftPadding = 0
let b:tablify_cellRightPadding = 0
nmap tm :Tlist <cr>:WMToggle<cr>
imap <C-Tab> <C-x><C-o>
filetype plugin indent on
"set completeopt=longest,menu
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-P>"

set cmdheight=1             " \u8BBE\u5B9A\u547D\u4EE4\u884C\u7684\u884C\u6570\u4E3A 1
set laststatus=2            " \u663E\u793A\u72B6\u6001\u680F (\u9ED8\u8BA4\u503C\u4E3A 1, \u65E0\u6CD5\u663E\u793A\u72B6\u6001\u680F)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ 
" \u8BBE\u7F6E\u5728\u72B6\u6001\u884C\u663E\u793A\u7684\u4FE1\u606F
set foldenable              " \u5F00\u59CB\u6298\u53E0
"set foldmethod=syntax       " \u8BBE\u7F6E\u8BED\u6CD5\u6298\u53E0
set foldcolumn=0            " \u8BBE\u7F6E\u6298\u53E0\u533A\u57DF\u7684\u5BBD\u5EA6
setlocal foldlevel=1        " \u8BBE\u7F6E\u6298\u53E0\u5C42\u6570\u4E3A
" set foldclose=all           " \u8BBE\u7F6E\u4E3A\u81EA\u52A8\u5173\u95ED\u6298\u53E0                            
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" \u7528\u7A7A\u683C\u952E\u6765\u5F00\u5173\u6298\u53E0
" 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

" \u7528\u6237\u76EE\u5F55\u53D8\u91CF$VIMFILES
if MySys() == "windows"
	let $VIMFILES = $VIM.'/vimfiles'
elseif MySys() == "linux"
	let $VIMFILES = $HOME.'/.vim'
endif

" \u914D\u7F6E\u591A\u8BED\u8A00\u73AF\u5883
if has("multi_byte")
	" UTF-8 \u7F16\u7801
    "set encoding=utf-8
    " set fileencoding=utf-8,gbk,gb18030
    "set termencoding=utf-8,gbk,gb18030
	set formatoptions+=mM
	set fencs=utf-8,gbk,gb18030

	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

if(has("win32") || has("win95") || has("win64") || has("win16")) 
    let g:iswindows=1
else
    let g:iswindows=0
endif

map <F12> :call Do_CsTag()<CR>
"nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<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>:copen<CR>
"nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
"nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
"nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
"nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
"nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
function Do_CsTag()
    let dir = getcwd()
    if filereadable("tags")
        if(g:iswindows==1)
            let tagsdeleted=delete(dir."\\"."tags")
        else
            let tagsdeleted=delete("./"."tags")
        endif
        if(tagsdeleted!=0)
            echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None
            return
        endif
    endif
    if has("cscope")
        silent! execute "cs kill -1"
    endif
    if filereadable("cscope.files")
        if(g:iswindows==1)
            let csfilesdeleted=delete(dir."\\"."cscope.files")
        else
            let csfilesdeleted=delete("./"."cscope.files")
        endif
        if(csfilesdeleted!=0)
            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None
            return
        endif
    endif
    if filereadable("cscope.out")
        if(g:iswindows==1)
            let csoutdeleted=delete(dir."\\"."cscope.out")
        else
            let csoutdeleted=delete("./"."cscope.out")
        endif
        if(csoutdeleted!=0)
            echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None
            return
        endif
    endif
    if(executable('ctags'))
        "silent! execute "!ctags -R --c-types=+p --fields=+S *"
        silent! execute "!ctags -R --c-types=+p --c++-kinds=+p --fields=+iaS --extra=+q ."
    endif
    if(executable('cscope') && has("cscope") )
        if(g:iswindows!=1)
            silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' -o -name '*.py' > cscope.files"
        else
            silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
        endif
        silent! execute "!cscope -b"
        execute "normal :"
        if filereadable("cscope.out")
            execute "cs add cscope.out"
        endif
    endif
endfunction
if has("autocmd")
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
endif

let NERDShutUp=1
set fileencodings=utf-8,gb18030,gbk,gb2312,big5
set fileencoding=utf-8
"set fileencoding=gb18030
set termencoding=utf-8
set encoding=utf-8
set langmenu=zh_CN.utf-8
set cscopequickfix=s-,c-,d-,i-,t-,e-
silent! execute "cs add cscope.out"
nmap cw :Tlist <cr>:WMToggle<cr>:cw<cr>:Tlist <cr>:WMToggle<cr>
au! BufRead,BufNewFile *.json set filetype=json 
au BufRead,BufNewFile *.go set makeprg=go
au BufRead,BufNewFile *.py set makeprg=python

function Test_python()
    let current_file = expand('%:p')
    exe ':ConqueTermSplit pylint ' . current_file
endfunction

nmap cp :call Test_python()<cr>

autocmd BufNewFile *.py exec ":call AddTitle()"
function AddTitle()
    call append( 0, "\#!/usr/bin/env python")
    call append( 1, "\# encoding: utf8")
    call append( 2, "\#")
    call append( 3, "\#       @author       : **************")
    call append( 4, "\#       @file         : ".expand("%:t"))
    call append( 5, "\#       @date         : ".strftime("%Y/%m/%d %H:%M"))
    call append( 6, "if __name__ == '__main__':")
    call append( 6, "")
    echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值