DarkMatter in Cyberspace
  • Home
  • Categories
  • Tags
  • Archives

vim使用笔记


基本文件操作

  • 打开文件::e

  • 保存文件::w

  • 保存并退出::wq或者:x

  • 另存为::sav

  • 关闭文件(但不退出vim)::bd(参见笔记 buffer-related operations in vim )

  • 退出vim::q

  • 打开光标处的文件: gf

参考笔记 Vim的文件浏览

界面与显示

  • 修改界面配色风格::colo evening (colo是colorscheme的简写,evening风格在gVim上比较好,ron风格在vim console上效果好)

  • 是否折行::set wrap/nowrap

  • 开/关行号::set nu/:set nonu (number和nonumber的简写)

  • 开/关语法高亮::syntax on/off

  • 显示/隐藏制表符(tab)和结尾符号::set list/nolist,tab显示为^I,结尾符显示为$,空格仍显示为空;

  • 刷新屏幕:Ctrl+L

  • vim console的界面提示语句中如果有中文,则Windows命令行窗口的代码页必须设置为GBK(cp936),否则vim console的中文提示信息会变为乱码。

  • 关闭搜索结果的高亮显示::noh(nohlsearch的简写);

gvim相关选项

  • 隐藏所有界面组件::set go= (go是guioptions的简写)

  • 显示水平滚动条::set go+=b

  • 显示垂直滚动条::set go+=r

  • 显示菜单栏::set go+=m

  • 显示工具栏::set go+=T

  • 更多guioptions相关定制选项见:h guioptions

定制界面字体/字号

gVim (gvim.exe)

界面菜单方式:在字体/字号菜单中选择::set guifont=*

命令方式: :set guifont=Consolas:h13

查询当前使用的字体/字号::set guifont

vim console ( vim.exe on Windows or vi on Linux)

由于 vim console使用操作系统的命令行窗口,可以通过修改命令行窗口(ConEmu on Windows or Terminator on Linux)属性中字体和字号的方法达到改变的目的,但由于Windows的GBK代码页中只提供点阵和新宋体两种字体,都不好看,当平常简单的文本查看和编辑工具的话,建议使用gVim,如果一定要用vim console,可以用ConEmu之类的命令行增强工具改变字体;

打开(修改)vim启动配置文件

以下方法可以用全局书签来代替(2013-8-13更新) :e \(MYVIMRC(或\)myvimrc)或者主菜单【编辑->启动设定】 (用于gVim)

:so % 修改完_vimrc后无需重启vim即可让新_vimrc生效,_vimrc里有函数时此方法无效

以上只对gVim有效,在Ubuntu上全局配置文件为/etc/vim/vimrc,但最好不要改它,因为即使改了之后要生效也得重启系统,而且影响其他用户的配置,比较好的方法是在用户$HOME下新建一个.vimrc文件,写上用户自己定制的特性,修改.vimrc后即刻生效。

光标移动

参考笔记“ Cursor move in vi”;

文档查找(相当于windows下的ctrl+f)

行内查找

  • f/F:向前查找/向后查找;

  • t/T:跳转到查找目标的前一个字符(主要与d,c等编辑指令配合使用);

  • 分号(;):重复最近一次查找;逗号(,):撤销最后一次查找;

跨行查找

/searched string

  • match case: option 1:/searched string \c ;option 2:using "set ic/noic" command to switch between ignore/match case(ic means igore case);

  • match whole word only: \<匹配词首,>匹配词尾,所以全字匹配就是\<searched string>;

  • search & replace word under the cursor: 光标置于要查找的单词上,"*"标出所有相同单词,ciw替换单词(参考Search and replace the word under the cursor)

  • incremental search: set incsearch

文本替换

  • 将光标下的单词替换为剪贴板里的单词:viwp,其中viw是选中一个词,p是粘贴;

:%s/four/4/g,"%"这个范围意为对所有行执行该命令,"g"标志则指示替换操作将一行中所有出现的目标字串都进行替换; 不过如果你的文件里面有"thirtyfour"这样的词, 结果就不是你想要的了, 它将会被替换为"thirty4". 要避免这种例外. 可以在要替换的目标字前面加上"\<", 它匹配一个word的起始位置::%s/\<four/4/g; 但是碰到"fourty"这样的词还是会弄错. ">"可以用来指示一个word的结束位置::%s/\<four>/4/g; 如果你是在写程序,你可能只想替换那些出现在注释中的"four",代码中的留下,这可有点为难,"c"标志可以让每个目标被替换之前询问你的意见::%s/\<four>/4/gc;

文本查找和替换的更多功能见笔记"用vim注释多行代码"和http://vim.wikia.com/wiki/Search_and_replace。

Copy/Paste

Vim中的y,d,p(拷贝yank,剪切,粘贴)放在了自己独有的一个剪贴板上,与windows的公用剪贴板不同,如果要将拷贝内容放入windows剪贴板,在拷贝命令前加"+("*表示VIM自己的剪贴板),例如"+yl00j就是将100行文本拷贝到windows剪贴板,vim剪贴板的使用方法见笔记 Vim的剪贴板操作 。

若想y, p的时候直接放在windows剪贴板上,只要在_vimrc里加一句:set clipboard+=unnamed(将无名寄存器与windows的+寄存器连接)就可以了(只在Windows上有效)。

拷贝/剪切一整行:yy/dd

光标前/后粘贴文本:P/p

从外部粘贴文本时防止缩进递增

用set noai关闭自动缩进,粘贴,然后set ai复原;

或者粘贴之后,选中要重排的段落然后用等号("=")自动设置缩进;

VIM的操作方式

动作命令+位移,例如拷贝光标下的一个字符:yl(l表示向右移动一个字符);拷贝从光标开始的100行文本:y100j。其中y代表拷贝,j是向下移动一行,100j就是向下移动100行。

  • 窗口(视图)和标签页的更多说明见笔记“ VIM的窗口和标签页操作 ”; * 与多个buffer相关的操作见“ buffer-related operations in vim ”。

  • 命令的自动补全: 输入前面的字符后按tab;

  • 显示/隐藏非ASCII码字符::set list/nolist

  • Visual模式:类似于windows的“先选择再操作”的方式,先hjkl或者其他光标移动键或者鼠标选择一个范围,再执行一个命令,如删除d,拷贝y等;v进入普通选择模式,V进入行选择模式,Ctrl+Q或者Ctrl+V进入列选择模式;

  • 列模式:见“ 用vim注释多行代码 ”;

改变备份文件和swp文件的目录

vim打开一个文件(例如file.txt)后会生成一个file.txt.swap文件,非正常退出VIM(没有保存文件)时可以用这个文件恢复,修改前的文件被另存为file.txt~,这两个文件都很有用,但默认是放在file.txt所在目录下,看上去比较杂乱,下面的指令将这两个文件放在temp文件夹下以解决这个问题:

set directory=C:\Windows\Temp 
set backupdir=C:\Windows\Temp

可以用set nobakupfile和set noswapfile不让这两个文件生成,但不建议这样做。

转换目标文件的行结束符格式

确定采用 dos 还是 unix 格式的行结束符。

  • 查询::set ff? (ff是fileformat的简写)

  • 改变dos格式文件为unix格式::set ff=unix (shell下运行DOS格式文件会出现“/bin/sh^M: bad interpreter...”错误)

设置新建文件的 dos/unix 格式

  • 设置默认格式为 unix:在 .vimrc 中 加入 set ffs=unix,dos

  • 设置默认格式为 dos:在 .vimrc 中 加入 set ffs=dos,unix

制表符(tab)相关的配置

包括下面4个参数:

set autoindent "设置自动缩进,缩写为ai
set tabstop=4 " tab的宽度是4个空格,缩写为ts 
set shiftwidth=4 " 使用>>时缩进的空格数,缩写为sw,>>是在标准状态下缩进,而用tab需要来回在标准和insert模式间切换; 
set expandtab " tab转换为空格,缩写为et

将缩进设为4个空格是许多编程语言(如Java)的习惯。双引号(")是vim脚本中的注释(comment)符号

将行首缩进为tab的文本内容替换为空格的命令(即untabify indent)是":retab"(需要先set expandtab);

Normal模式下的常用编辑指令

  • 光标前/后插入:i/a

  • 光标所在行的行首/尾插入:I/A

  • 光标的上/下一行插入:O/o

  • 删除单个字符:x

  • 替换单个字符:r(替换后仍然是normal模式,而不像s进入插入模式)

  • 进入覆盖模式:R

  • 删除光标所在字符并进入插入模式:s 参考A Tale of Two (Vim) Commands: "s" and "c"

  • 删除光标所在行并进入插入模式:S

  • 进入字符选择(visual)模式:v

  • 进入行选择模式:V

  • 使用书签:参考笔记“ Note about marks in vi ”;

  • 自动缩进(auto indent):= 已验证对Java, C, XML文件有效,不同于“自动格式化 auto format”,后者可以将在同一行上的代码重排到多行并缩进;

  • 缩进与反缩进(indent/unindent):>、<(详见:help shift-left-right)

  • 重复上一次操作:.(参考http://www.viemu.com/a-why-vi-vim.html)

  • 选中光标所在单词:*

  • 移动光标到行首/尾:0/$

  • 移动光标到匹配括号处:%

  • 大小写变换:将范围内的文字转换为大/小写,gU/u/~,例如:gUw将光标开始处的一个单词转换为大写,gu$将光标开始到行尾文字转换为小写,"~"表示大小写切换,例如g~w表示将光标开始处的单词大小写对换;单个的~表示切换光标下字母大小写;

c键

删除指定范围(如一个词,一句话,一段)并进入插入模式,例如ciw将删除光标所在词并进入插入模式,其中i表示inner,即不包括单词旁边的空格、括号、引号等,w表示范围是word,cas将删除整句(s: sentence)以及周围的分隔符(a表示含分隔符),还可以简写为cw,详见The Power and Precision of Vim's Text Objects: Efficient, Elegant, Awesome。

c键后面还可以跟光标移动指令,例如cft删除的范围是从光标到t字符出现的地方,c2w删除光标开始处的两个word。

C键删除从光标到行尾并进入插入状态。

如果使用v键进入visual模式选中文本,则c键与s键的功能一样,都是删掉选中的文本然后进入插入模式。

路径相关操作

  • 设置vim的启动路径:配置文件_vimrc里加上"cd <当前路径>",例如:cd e:\MyDoc\MobileBook;

  • 显示当前路径:":pwd"

  • 改变当前路径:":lcd <目标路径>"

与Shell交互

  • 执行系统命令::!,例如列出当前文件夹下文件::!ls;又如在vim中运行"ruby <当前文件>"写为:":!ruby %",参见笔记 Use VIM as lightweight IDE ;

  • 将系统命令的输出插入到当前buffer中:!!

  • 临时进入shell: :sh,返回vi: C-d

Autocomplete

C-n, or C-p



Published

May 28, 2009

Last Updated

May 28, 2009

Category

Tech

Tags

  • Vim 92
  • vimrc 3

Contact

  • Powered by Pelican. Theme: Elegant by Talha Mansoor