Vi Cheatsheets
整理收集一些vi常用命令,备忘。
移动
水平方向
- ⇒ .or. l 右移一个字符
- ⇐ .or. h 左移一个字符
- ^ 行首
- $ 行尾
- w/W 下一个单词/长词的开始
- e/E 下一个单词/长词的结尾
- b/B 前一个单词/长词的开始
- (/) 前一句/下一句的开始
- {/} 前一段/下一段的开始
垂直方向
- up .or. k 向上一行
- down .or. j 向下一行
- PGUP .or. ^B 向上一页
- PGDN .or. ^F 向下一页
- (NUMBER)G 转到第NUMBER行
- /string 查找string
- n/N 向后/前继续查找
打开保存和退出
打开
- :o 打开
- :e 打开
- :enew 新建窗口打开
- :sp 分割窗口打开
保存和关闭
- :w 保存
- :x 保存并退出
- :q 退出
- :q! 直接退出
窗口,Buffer
打开和关闭
- :e 在buffer里打开
- :bdelete [filename|buffer no] 关闭buffer
- :sbuffer 分屏打开buffer
- CTRL + w 在不同的屏见切换
浏览
- :ls: .or. :buffers .or. :files 显示打开的buffer
- :ls! .or. :buffers: .or. :files: 显示所有buffer,包括隐藏的
- :bfirst .or. :brewind 转到第一个buffer
- :bnext 转到下一个buffer
自定义alias
如果觉得操作不方便,你可以在.vimrc里自定义快捷键,比如:
nmap <C-B> :bnext<CR>
这样CTRL + B就相当于:bnext加回车。
命令模式
这些命令可以修改文本,但是仍使你处于命令模式下。
- x 删除当前光标下字符
- J 将下一行加到当前行末尾
- r(char) 用char替换当前光标下字符
- dd 删除当前行
- d(OFFSET) 从当前位置向后删除OFFSET个字符
- u 撤销
- o 重复上一条编辑命令
插入模式
任意这些命令会将你置于插入模式下, 你可以输入文本,敲击回车来开始新行,用上下左右来移动,用Del删除。 按ESC可以回到命令模式。
- i/a 插入到当前位置前/后
- I/A 插入到当前行的开始/末尾
- o/O 另起下/上一行开始输入
- cc 替换当前行
- c(OFFSET) 替换到当前位置后的OFFSET位置
复合命令
vi开始体现出真正威力,所谓所想即所得
移动
- 3⇒ 光标向右移动3个字符
- 4) 光标向后移动4句
- 2b 光标向左移2个单词
删除
- d3w 删除后面三个单词
- d} 删除本段光标后面部分
- d) 删除本句光标后面部分
更改
- c) 替换本句其余部分
- c$ 替换本行后面部分
剪切、复制和粘贴
利用可视化模式
- 按v进入可视化模式
- 移动光标高亮需要重用的文本
- 按d剪切,按y复制
- 移动光标到目标位置
- 按P粘贴到光标之后
- 按p粘贴到光标之前
搜索
- :s/reg/rep/ 用rep替换当前行内首个匹配reg的字符串
- :s/reg/rep/g 用rep替换当前行内所有的匹配reg的字符串
- :%s/reg/rep/g 全文本替换
- :%s/reg/rep/gc 全文本替换前提是确认
缩进
- «= 向左缩进
- >⇒ 向右缩进
当然一般都用autoindent和各类源代码的缩进plugin来缩进
配置命令和参数
例举我的vimrc里的一些常用配置
" default encoding let &termencoding = &encoding set encoding=utf-8 " font set guifont=youyuan:h12:cGB2312 " default color scheme colorscheme torte " Wrap too long lines set nowrap " wrap words at 70 " set textwidth=70 " Tabs are 4 characters set tabstop=4 " (Auto)indent uses 4 characters set shiftwidth=4 " spaces instead of tabs set expandtab " guess indentation set autoindent " Expand the command line using tab set wildchar=<Tab> " show line numbers set number " Fold using markers {{{ " like this " }}} set foldmethod=marker " enable all features set nocompatible " powerful backspaces set backspace=indent,eol,start " highlight the searchterms set hlsearch " jump to the matches while typing set incsearch " ignore case while searching set ignorecase " history set history=100 " 1000 undo levels set undolevels=1000 " show a ruler set ruler " show partial commands set showcmd " show matching braces set showmatch " write before hiding a buffer set autowrite " shift = 4 set shiftwidth=4 " allows hidden buffers to stay unsaved, but we do not want this, so comment " it out: "set hidden " auto-detect the filetype filetype plugin indent on " syntax highlight syntax on " abbrevations ab #d #define ab #i #include ab #b /****************************** ab #e <space>******************************/ ab #l /*------------------------------*/ " we use a dark background, don't we? set bg=dark " Always show the menu, insert longest match set completeopt=menuone,longest " When editing a file, always jump to the last known cursor position. " Don't do it when the position is invalid or when inside an event handler " (happens when dropping a file on gvim). autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif " " twitvim settings " http://www.vim.org/scripts/script.php?script_id=2204 " " let twitvim_login = "user:pass" " switch between twitter and identica login function! Switch_to_twitter() let g:twitvim_api_root = "http://twitter.com" let g:twitvim_login = "user:pass" FriendsTwitter endfunction function! Switch_to_identica() let g:twitvim_api_root = "http://identi.ca/api" let g:twitvim_login = "user:pass" FriendsTwitter endfunction command! ToTwitter :call Switch_to_twitter() command! ToIdentica :call Switch_to_identica() let twitvim_proxy = "127.0.0.1:8118" let twitvim_count = 129 let twitvim_browser_cmd="E:\portable\GoogleChromePortable\GoogleChromePortable.exe" nnoremap <F8> :FriendsTwitter<cr> " " twitvim plugins " "let twitvim_enable_python = 1 "let twitvim_enable_perl = 1 "let twitvim_enable_ruby = 1 "let twitvim_enable_tcl = 1 " " vimim settings " http://www.vim.org/scripts/script.php?script_id=2506 " let g:vimim_one_key=1 let g:vimim_chinese_input_mode=1