首页 > 代码库 > vim-1-基本使用

vim-1-基本使用

------------------------------------------------------------------------------------
gvim的四种模式:普通模式,插入模式,替换模式,命令模式。

普通模式》插入模式
   i/I 在光标前面/行首插入
   a/A 在光标后面/行尾插入
   o 在下一行行首插入
   O 在上一行行首插入
   s 删除光标所在字符并开始插入(具体用法看x)
   c 开始删除,之后进入插入模式(具体用法看d)
   插入模式和在windows下一样,各种快捷键都能用
   另外,在普通模式下,ctrl+s依然是保存

普通模式》替换模式 
   r:替换光标所在的字符
   数字r:将光标所在向后n个字符都替换掉
   R:从光标所在字符开始替换,按esc回到普通模式

普通模式》命令模式: 按:

插入模式,命令模式》普通模式:按esc
注:我将插入/替换模式的esc映射成kk了,在插入/替换模式下按kk即可返回普通模式
------------------------------------------------------------------------------------
普通模式:进入gvim后的默认模式
  --------------------------------------------------
  移动:
    h j k l:左下上右移动
    数字 h j k l:左下上右移动n下
    w/e:移动到下一个单词开头/结尾
    b/B(ge):移动到上一个单词开头/结尾
    f/t a:在当前行,移动到下一个出现a的位置/前
    F/T a:在当前行,移动到上一个出现a的位置/前
    数字f/t a:在当前行向后移动到第n次出现a的位置/前
    数字F/T a:在当前行向前移动到第n次出现a的位置/前
    0/$:定位到行首/行尾
    ^/g_:定位到非空格的行首/行尾
    %:在两个匹配的符号((,",{)等等中切换(光标需先移动到其中一个符号,
     如果不在,则会向后找到最近的一个)
    数字%:按照百分比定位文档 的位置
    G:定位到最后一行行首
    行号G:定位到对应行号行首
    gg:移动到第一行行首
    H:定位到当前屏幕的最上边
    M:定位到当前屏幕的中间
    L:定位到当前屏幕的最下边
    ctrl+u/d:向上/下滚动半屏
    ctrl+f/b:向上/下滚动整屏
    zz:把当前行置为屏幕正中间
    J:将下一行移动到这一行末尾(合并当前行和下一行)
    关于数字键: 数字+命令表示执行多次操作, 数字一般放在命令之前.

    >>/<<:当前行增大/减小缩进
    ==:当前行自动进行缩进

    ``:反单引号,在两个跳转点之间切换,如果你原先处在33行,跳到了55行,
        使用这个命令可以回到33行,多次使用就是来回切换,
        注:j,k导致的跳转不可,并且需要是不在同一行内的位置间的切换
    ctrl+o/i:跳转到上一次/下一个光标停留位置(不在同一行内,且不是hjkl导致的光标移动)

   
  --------------------------------------------------
  查找:
    /xxx:在全文中查找xxx,并高亮显示,字符.*[]^%/?~$ 有特殊意义,需要用\转义
    ?xxx:和/效果一样,只是查找方向反向
    N/n:在高亮的选中处之间前后切换,前面可以加数字,表示第n次出现的位置
    vim会记录已经查找过的内容,再次查找时,可通过上下键来切换
    #/*:移动到上一个/下一个与光标所在单词相同的单词
    /\<xxx\>:匹配完整的单词,如果某单词中只是包含xxx,不会被匹配上

模式搜索(正则表达式搜索):
^ 表示一行的开头,$ 表示一行的结尾,^the就表示位于行首的the
. 表示任意字符,如果想查找的就是. ,则需要转义
    一个有用的命令
    :nohlsearch,此命令可以取消当前的高亮, 简写 nohl
 
  --------------------------------------------------
  复制,剪切,删除,粘贴:
    在vim中,剪切和删除是一样的
    下列命令中其实是没有中间的空格的,这里只是为了方便阅读
注:几乎所有的移动,复制,粘贴命令前面都可以加数字,表示重复的次数,
也几乎都可以加上移动键,表示向某个方向复制/剪切 
   
    y:开始复制
    yy/Y:复制当前行
    行号yy:从当前行开始,复制多行
    y 0/$:从光标处复制到本行开头/末尾
    y w/e:复制一个单词,或从光标处复制到本单词末尾
    yt a:从光标出开始复制,直到遇见a,a不复制
yG:从当前行开始复制直到最后一行
yyg:从当前行开始复制直到第一行
   
    x:剪切/删除光标所在的字符,依然停留在普通模式
X:删除当前光标左边的字符
    数字 x:剪切/删除从光标开始往后的n个字符,依然停留在普通模式
   
    d:开始剪切/删除(用法和y类似,不多说了)
dd:剪切整行
D:剪切至行尾的内容(这点和y不一样)
    
    p:粘贴复制/剪切的内容到光标后面,如果是整行的,则粘贴到当前行的上面
    P:粘贴复制/剪切的内容到光标前面,如果是整行的,则粘贴到当前行的下面
    数字p/P:粘贴多次
    ddp:其实就是删除当前行再粘贴了,但是你会发现,当前行和下一行换位置了
xp:其实就是删除当前光标所在字符再粘贴,但是你会发现,两个字符交换位置了

.:普通模式中重复上次的命令,除了u命令,这个只能重复最近的一次命令
比如先搜索出全文中的xxx,然后cwyyy,表示修改成yyy,然后回到普通模式,
n.n.n.一直按,之后的xxx都会变成yyy,cwyyy这个命令就会一直重复
   
  --------------------------------------------------
  文本对象
之前的复制和删除都是以字符,行为单位,w,e的作用是从光标处到下个单词开头
或本单词结尾,所以要想删除整个单词,还得先将光标移动到单词开头,这很麻烦,
可以使用文本对象搞定
aw:a word,表示一个单词,及其后面的空白,daw表示删除光标所在单词及空白
iw:inner word,也是表示一个单词,但是不包括单词后面的空白
as:a sentence,表示一个句子,及其后面的空白,das表示删除光标所在句子及空白
is:inner sentence,也是表示一个句子,但是不包括句子后面的空白

  --------------------------------------------------
  可视化选择:
    v:可视化选择,按esc或再次按v退出,选择的内容会被复制
在可视化选择模式中,移动键,数字键,都是可以使用的
V:整行可视化选择
ctrl+q:块可视化选择,其实应该是ctrl+v,但是windows里这个是粘贴,所以不能用
gg,然后ctrl+q(ctrl+v),然后按G,就可以选择文本的第一列
o:在(块)可视化选择状态下,使光标移动到选择区域的另一头
O:在块可视化选择状态下,使光标移动到这一行的另一头
    
  --------------------------------------------------
  宏:
按q键开始录制宏,一般跟上寄存器的名字,寄存器可使用26个英文字母
如qm,表示将宏录制到m寄存器中,
然后进行一系列操作,都会被记录下来,再次按q,退出宏录制,
按@m表示播放m寄存器中的宏,前面可以加数字表示播放次数,
按@@表示播放之前播放过那个个宏,
  --------------------------------------------------
  自动补全:
  ctrl+p:牛逼到爆

  ----------------------------------------------------
剪切板:
  y, d, c, x等等命令都是将内容存进了vim的剪切板, 如何和windows的剪切板交互?
  在这些命令之前加 "* , 即可

  --------------------------------------------------
  其他:
    u:撤销上次操作, U: 行撤销, 可以撤销所有在最近行上的编辑操作.
    ctrl+r:恢复上次操作(ctrl+y也可以,但它是windows中的快捷键)
    ctrl+l:有时候vim中的有些文字会花掉,此快捷键可以刷新视图
   
    gU/gu:将选中的内容转化为大/小写
    
    ctrl+p:自动补全之前编辑过的单词,词组
    ZZ:退出当前编辑的文件
------------------------------------------------------------------------------------
命令模式
  --------------------------------------------------
  一般命令:
  命令模式前面都有个":"这里就省略了
  w:保存不退出
  wq/x: 保存退出
  q/q!:不保存退出/强制不保存退出
  e!:放弃所有修改,载入文件的初始状态,慎用!
        pwd: 显示当前目录
  !shell指令:执行shell(dos)指令
  r!shell指令:将shell(dos)指令的执行结果写到当前行的下面
  在命令模式里按上下箭头可以切换之前输入的命令
 
  --------------------------------------------------
  编辑多个文件:
e/edit 文件路径:在当前标签页中打开文件,路径中使用/或\都可以,
可使用tab键自动补全文件名。也可以一次打开多个文件,文件路径中间以空格隔开
previous/next:切换到上一个/下一个打开的文件
wprevious/wnext:保存当前文件,然后切换到上一个/下一个打开的文件
bp/bn:在当前标签页中切换上一个/下一个文件
        vim -R filename, 以制度方式打开

  --------------------------------------------------
  分割窗口:
split:在当前窗口上方分割一个窗口,新窗口中依然是当前文件
new:分割出新的空窗口
split filepath:在新窗口打开文件
new filename:在新窗口中编辑文件
split,new命令都可以在前面加上数字,表示新窗口的高度(行数)
ctrl+w w:在两/多个窗口键切换
ctrl+w +/ctrl+w -:当前窗口扩大/缩小一行,前面可以加数字,表示扩大/缩小多行
数字 ctrl+w _:将窗口变为指定高度
:close/:q/ZZ:都可以退出当前窗口
only:关闭其它所有窗口,只保留当前窗口
         wall, 全部保存, qall, 全部关闭
CTRL-W h 到左边的窗口
CTRL-W j 到下面的窗口
CTRL-W k 到上面的窗口
CTRL-W l 到右边的窗口
CTRL-W t 到顶部窗口
CTRL-W b 到底部窗口
ctrl-w H,J,K,L, 左右上下移动窗口

  --------------------------------------------------
  标签页
一般来说tabe,tabedit,tabnew的作用是一样的,下面都用tabe,除非有特殊情况
tabe:打开新的标签页
tabe e:/xxx:在新标签页中打开文件
tab:后面跟可以打开新窗口的命令(如 help),在新标签页打开新窗口,如 tab help

  --------------------------------------------------
  替换:
[range]s/from/to/[flags],表示将range范围的from替换成to,flags匹配范围
s/aaa/bbb/:表示把当前行的第一个aaa替换成bbb,不指定flag就只替换第一个
%s/aaa/bbb/g:把全文中的所有aaa替换成bbb,g的意思是指全部匹配的
行号1,行号2s/aaa/bbb/g:把行号1和行号2之间的aaa替换成bbb
行号1,行号2s/^/aaa/g:把行号1和行号2之间的行前面都加上aaa(即,可以使用正则)
另外,.代表当前行,$  表示最后一行
行号1,行号2s/^/\/\//g:从行号1和行号2之间的行都加上//注释(这是因为/有特殊用途,需要转义)
行号1,行号2s/\/\//g:从行号1和行号2之间的行都去掉//注释
另一种转义的方法是,使用+代替/,/正常使用,如 4,8s+aa/bb+aa or bb+
  --------------------------------------------------
  定位
以下命令执行后都会返回普通模式
G:定位到最后一行
行号:定位到对应行号
行号1,行号2d:删除从行号1到行号2的内容
行号1,行号2>>:从行号1到行号2向右移动一个tab
行号1,行号2>>:从行号1到行号2向左移动一个tab
/xxx:在全文中搜索xxx,并高亮显示,按 n 键可在选中处间切换
 
------------------------------------------------------------------------------------




来自为知笔记(Wiz)


附件列表