====== VI/VIM 编辑器 ====== VIM 的模式 * 普通模式,文件打开时即处于普通模式,在其他模式下按下 ESC 键切换回普通模式 * 编辑模式,可以普通模式下按下以下键,均会进行部分操作并进入编辑模式 * i/a/I/A 键:将光标定位当前位置/行首/行尾进入编辑模式 * o/O 键:在当前行下方/上方插入一个空行,定位至空行,并进入编辑模式 * cX 键:X代表删除的内容,比如 cw 就是删除到当前单词边界,并进入编辑模式,还有 c$ 删除到行尾,还有些其他的,用得不多,就不写了 * 命令模式,普通模式下输入英文冒号'':'' * 可视模式,普通模式下输入v/V键进入,其中:v进入块视图,V进入行视图,就只能一行一行的选择 ====== 编辑多个文件和窗口控制 ====== 为什么要要分屏打开文件,主要是方便在多个文件之间转移内容,一个进程下打开多个文件,内容缓冲区是共用的,方便将一个文件的内容复制到另外一个文件中。 1. 打开第一个文件 vim file-1.txt 2. 分屏打开第二个文件 :vs file-2.txt # 在VIM的命令模式下输入,即一个ESC键,然后键入冒号,上面那个冒号是命令指示符,代表已经进入VIM的命令模式 # 这个会打开左右两个分屏,左侧分屏是file-1.txt,右侧分屏是file-2.txt # 如果只想打开一个空的分屏,只需要打入 :vs 即可 :vs # 分成上下两个分屏 :sp file-2.txt 3. 切换焦点窗口 * 使用 CTRL-w h/j/k/l 键切换,(左下上右) * 使用 CTRL-w Arrow 键(方向键) * 使用 CTRL-w w 依次切换 在一个分屏下复制的内容可以在另外一个分屏上粘贴的。 4. 关闭分屏,命令模式下键入 ''q'' 并回车即可 ====== 内容编辑 ====== ===== 定位&光标 ===== 没有特别说明的情况下,VIM应该处于普通模式下,在其他模式下按ESC返回普通模式 1. 上下左右移动光标 * 使用 Arrow 方向键移动 * 使用 hjkl 移动(分别对应左、下、上、右) 2. 特殊移动 * 跳转行,直接在命令模式下输入行号 * 向当前位置移动N个字符或者行数,直接在跳转命令前输入行数,如:10j表示当前位置向下跳转10行 * 跳转匹配括号,码代码经常遇到,特别是写JAVASCRIPT的,一大堆括号,在非编辑模式下,按下%(SHIFT+5) * 翻页:PAGEUP/PAGEDOWN, CTRL-B(后翻),CTRL-F(前翻), 不过CTRL-B和TMUX的捕获键冲突了,需要注意 * 跳转行首:数字0 * 跳转行尾:$(SHIFT+4) * 光标移动到下个单词 * 跳转文件首:非编辑模式,按下 gg * 跳转文件尾:非编辑模式,按下 G(SHIFT+g) ===== 查找&替换 ===== 查找 * 普通模式下,按下 / 键进入查找模式 * 命令模式下,输入 /content 以查找内容 替换 * 命令模式下,对M,N行内查找到的所有内容实施替换,如果没有g标志,只会替换找到的第一个,:M,Ns/search/replace/g * 命令模式下,对全文实施替换替换。 %s/search/replace/g * 可视模式下,对选中的块实施替换。在块模式下选择块后,:s/search/replace/g 常用标志位 * i 忽略大小写 * c 替换前确认 * g 全部替换 ===== 复制粘贴 ===== 复制 * 复制一行: yy * 复制M~N行,:m,ny * 复制括号内内容,光标需要先定位到括号处: * ya{ 复制当前配对的括号间内容(包含括号) * yi{ 复制当前配对的括号间内容(不包含括号) * 同理,还有 ya(, yi(, ya", ya' 等,可用于快速定位与复制 当命令变为 c 时,比如 ca{ 会删除此代码块,并进入插入模式 粘贴 只需在普通模式下按 p(小写),缓冲区内容会添加到光标下方一行 还有些其他用法,遇到再说 ====== 折叠管理 ====== 在写JSON或者JAVASCRIPT的时候,有可能会遇到一大堆的括号,然后大量的缩进,根本搞不清楚哪个括号是对应哪个的,因此将不专注的部分折叠起来,就能专注到需要编辑的部分了。 ===== 折叠模式 ===== * 手动模式:可以按照手动方式切换,可以使用类似 ''zfa{'' 这样的指令折叠代码块 * 按照缩进折叠:写PYTHON/YAML的时候用 * 按照语法折叠:按照文件的语法类型进行折叠 ===== 切换模式和帮助 ===== :set foldmethod=manual :set foldmethod=syntax :set foldmethod=indent :set foldlevel=1 #折叠时显示缩进 :mkview #保存折叠信息 :loadview #读取折叠信息 :help folding :help fold-marker :help fold-syntax :help fold-indent :help fold-manual ===== 常见操作 ===== * 手动模式下按照匹配的代码块进行折叠(这个比较常用,括号一起折叠):''zfa{'' * 不折叠括号,这样可以看出层次:''zfi{'' * 取消折叠: ''za'' 或空格键 其他快捷键:在Syntax或Indent模式下可能会遇到 * ''zc/zo'' 关闭/打开当前折叠,注意用za是切换 * ''zm/zM'' 关闭所有折叠/关闭所有嵌套折叠 * ''zn/zN'' 禁用/启用折叠 * ''zr/zR'' 打开所有折叠/打开所有折叠及其嵌套的折叠 * ''zd/zE'' 删除当前/所有折叠 * ''zj/zk'' 切换下一处/上一处折叠 ====== 常用命令 ====== 1.显示行号 :set nu 2.窗口管理的,之前已经介绍过 3.查找替换的 4. 保存&退出 :w file.txt 保存为file.txt, 直接保存的话,直接w就可以 :wq 保存并退出 :q! 不保存并退出 ====== 一个示例 vimrc 文件 ====== filetype on syntax on set shiftwidth=2 set expandtab set number set ts=2 set autoindent set breakindent nnoremap za nnoremap >> augroup filetype_python autocmd! autocmd FileType python setlocal foldmethod=indent autocmd FileType python set foldlevelstart=0 autocmd FileType python setlocal foldmarker=---,--- augroup END