Skip to content

Instantly share code, notes, and snippets.

@menghan
Created February 25, 2013 09:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save menghan/5028701 to your computer and use it in GitHub Desktop.
Save menghan/5028701 to your computer and use it in GitHub Desktop.
学习 vim help 的笔记

undo and redo

  • u/^R/U
  • undo + <num> / g- / g+

    前者用于知道跳转去向,后者用于不知道的

  • :undolist
  • :earlier 10s / 10h / 1m / :later

start

  • :scriptnames 列出启动文件

help

  • :help index :help CTRL_A :help i_CTRL_H :help 'number' 选项 :help E37 :help subject() :help -subject 命令行选项 :help +subject 编译特性

movement

  • fh VS. th
  • zz zt zb
  • CTRL_O and CTRL_I and :jumps

* ' 跳转前的光标位置 " 最后编辑的光标位置 [ 最后修改的开始位置 ] 最后修改的结束位置

vimrc

  • map Q gq
  • :: vnoremap _g y:exe "grep /" . escape(@", '\/') . "/ .c.h"<CR>

plugins

  • ftplugin/<filetype>.vim
  • ftplugin/<filetype>_<name>.vim
  • ftplugin/<filetype>/<name>.vim

options

  • :options 可以让选项即时生效
  • :set iskeyword& 恢复默认选项

print

  • 4个选项 'printdevice' 'printheader' 'printfont' 'printoptions'

registers

  • "fyas as: 一个句子

readonly

  • -R / view, -M

move screen

  • CTRL-W H/J/K/L

clipboard

  • '*'对应于当前选择区 '+'对应于剪切版

registers

  • qc
  • qC 向 c 中追加

. 代表当前行

  • :write somefile
  • :.write somefile 把当前行写入somefile
  • :.,$write somefile 把从当前行到最后一行写入somefile
  • :?^Chapter?,/^Chapter/-1s=grey=gray=g
  • :.+3,$-5
  • :'t,'b
  • 如果知道想修改多少行,比如5,可以按 "5:",会得到:: :.,.+4
  • :g+//+s/foobar/barfoo/g

大小写

  • ~
  • U
  • u
  • guw/gUw/g~w

read or write

  • :r somefile/:read somefile/:$r somefile/:0r somefile
  • :.write >> collection

排版文本

  • gqap ap代表一段

过滤命令

  • 将光标放于第一行,!5Gsort<Enter>,代表对第1~5行作sort命令
  • !!date<Enter> !!代表对当前行过滤, date的输出变为当前行

读入外部命令的输出

  • :read !ls
  • :0read !date -u 注意,!!替代当前行,:read插入行
  • :write !wc 将文件传给wc,注意不能写成:write! wc

恢复文件

  • vim -r somefile 或者vim -r ""

Tips

  • 所有的文件里替换:: vim *.cpp qq :%s/<GetResp>/GetAnswer/ge :wnext q @q 999@q 加/ge中的e是因为,有e选项告诉:substitute找不到不报错,不会因报错而停止
  • 反转行顺序:: :g/^/m 0
  • 统计字数等,选中或不选(全文) gCTRL_G

命令行

  • :set isk<Tab>,输入=再按<Tab>,就会把默认选项列出
  • :edit som<Tab>,按<Tab>前进,按<CTRL_P>后退,看匹配总览,按<CTRL_D>,把它扩展成最长无歧义字符串,按<CTRL_L>
  • 历史: q: / :history /something

viminfo

  • '0,回到上次退出vim的地方,'1'2..'9以此类推,看:marks
  • 保存视图 :mkview :source

补全

  • :: CTRL-X CTRL-F 文件名 CTRL-X CTRL-L 整行 CTRL-X CTRL-D 宏定义 (包括包含文件里的) CTRL-X CTRL-I 当前文件以及所包含的文件 CTRL-X CTRL-K 字典文件内的单词 CTRL-X CTRL-T 同义词词典文件内的单词 CTRL-X CTRL-] 标签 CTRL-X CTRL-V Vim 命令行 CTRL-X CTRL-O Omni补全
  • inputmod: 按CTRL_A插入上一次插入的文字
  • inputmod: 按CTRL_Y插入上一行的那个字母, CTRL_E对应于光标下方
  • CTRL_R输入寄存器里的值
  • CTRL_V 9. CTRL_V 09. CTRL_V 009. CTRL_V x7f CTRL_V o123 CTRL_V u1234 CTRL_V u12345678
  • CTRL_O 临时命令模式

format

  • :a,bcenter / :a,bright
  • :1left 5 :2,5left
  • 变段为行:: :g/./,/^$/join

重复

  • 改动多个文件:: :args *.c :argdo %s/<x_cnt>/x_counter/ge | update
  • 类似还有:windo, :bufdo,但做之前先检查一下会有多少文件受影响
  • // 查找上一次的东东
@zencodex
Copy link

zencodex commented Nov 2, 2016

很棒的技巧总结

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment