Vim 基础

  • A+
所属分类:系统文档

一、模式转换

1、模式

  1. Normal 普通模式
    2. Insert 插入模式
    3. Command 命令模式
    4. Visual 可视模式
    5. Replace
    6. Change
    7. Substitute

1、Normal —> Insert
i —> insert 在当前字母的前面插入
a —> append 在当前自摸的后面插入
o —> open a line below 创建一个新行插入
I —> insert before line 在当前行的最前面插入
A —> append after line 在当前行的最后面插入
O —> append a line above 在当前行的前面创建一个新行插入
2、Insert —> Normal
Esc —> 其他模式返回Normal模式
3、Normal —> Command
: —> 进入Command模式
4、Normal —> Visual
v —> 进入Visual模式,选择
V —> 进入Visual模式,选中整行
Ctrl+v —> 进入Visual模式,竖向选择

二、常用命令介绍

1、Normal模式

移动:
h/j/k/l —> 方向键(左/下/上/右)
w/W —> 移到下一个单词开头(word)
e/E —> 移到下一个单词结尾(end)
b/B —> 移到上一个单词开头(back word)
f[char] —> 移动到下一个字符。使用使用逗号(,)/分号继续搜索改行的上一个/下一个
F[char] —> 移动到下一个字符
0/$ —> 移动到行首/行尾
^/g_ —> 移动到行首/行尾非空白字符
(/) —> 移动到段落首字母/段落尾
{/} —> 移动到上一个段落尾/段落尾
gg/G —> 移动到文件开头/结尾
ctrl+O —> 返回上一次移动位置
H/M/L —> 移动到当前屏幕的开头/中间/结尾(Head/Middle/Lower)
Ctrl+u/f —> 上/下翻页(upward/forward)
zz —> 当前行在屏幕中间

删除:
       dw ---> 删除当前单词(delete word)
       daw ---> 删除当前单词及周围的空格(delete arround the word)
       diw ---> 删除当前单词但不删除周围的空格
       dt[char] ---> 删除到[char]之间的内容(delete to [char])
       d$ ---> 删除到行尾
       d0 ---> 删除到行首
       [number]dd 删除[number]行。例:2dd 删除2行
       [number]x 删除[number]个字符。例:4x 删除4个字符
       v/Ctrl+v进入视图模式选择内容, x ---> 选择内容删除
其他:
       u ---> 撤销

java

2、Command模式

:sp/Ctrl+w,s —> 横分屏(split)
:vs/Ctrl+w,v —> 竖分屏(vertical split)
:w —> 保存
:q —> 退出
:% s/click/dlick/g —> 将click替换为dlick(% 表示全部文件,s 表示替换,s/click/dlick 表示把 click 替换成 dlick,g 表示全局)
查询:
/[word] —> 向后查找。例如:/click 向后查找click单词,使用N/n跳转到上一个/下一个单词
?[word] —> 向前查找。例如:/click 向前查找click单词,使用n/N跳转到上一个/下一个单词

替换:
        :[range] s/{pattern}/{string}/[flags]
            - range ---> 范围。例:10,20表示10-20行, %表示全部
            - s ---> 替换(substitute)
            - pattern ---> 被替换的内容(可以是正则表达式)
            - string ---> 替换后的内容
            - flags ---> 标志。
                - flag常用标志
                    - g ---> 全局范围内执行(global)
                    - c ---> 确认,可以确认或者拒绝修改(confirm)
                    - n ---> 报告匹配到的次数而不替换,可以用来查询匹配次数(number)
       
        练习:
            :% s/const/var/g 全局替换cosnt为var
            :1,6 s/const/var/c 1到6行替换const为var(需要确认)
            :% s/const//n 全局查询const的次数
            :% s/\<connect\>/test/g 只替换connect的单词,不替换connection等的,正则替换
   
    多文件操作:
        vim pytest.py ---> 打开pytest.py
        :e test1023.scala ---> 打开或者新建 test1023.scala
        :ls ---> 查看缓冲区
              2 %a   "pytest.py"                    第 6 行
              3      "test1023.scala"               第 1 行
        :b 2 ---> 跳转到2(pytest.py)
        :b test1023.scala ---> 跳转到test1023.scala
   
    窗口:
        Ctrl+w,s/:sp ---> 横分屏(split)
        Ctrl+w,v/:vs ---> 竖分屏(vertical split)    
        Ctrl+w,h/j/k/l ---> 光标在屏幕间移动
        Ctrl+w,H/J/K/L ---> 当前屏幕左/下/上/右切换位置
       
    Tab(标签页):
        :tabe [filename] ---> 在新标签页打开文件(tab edit)(使用 gt/gT 向下/向上切换 Tab 页)
        Ctrl+W,T ---> 把当前窗口移到一个新标签页
        :tabc ---> 关闭当前标签页及其中的窗口(tab close)
        :tabo ---> 只保留活动标签页,关闭所有其他标签页(tab only)
       
        练习:
            vi Dockerfile.txt
            :vs 面试.txt
            :vs englist_word.txt
            :tabnew pytest.py
            :vs hello.py
            gt ---> 切换标签页
            :tabc
java

3、Insert模式

ctrl+h ---> 删除上一个字符(在终端也适用)
    ctrl+w ---> 删除上一个单词(在终端也适用)
    ctrl+u ---> 删除当前行(在终端也适用)
java

4、Replace、Substitude、Change模式

r[char] —> 将当前字符替换为[char]。例:ra 将当前字符替换为a
s —> 删除当前字符,进入插入模式
c —> 删除当前字符,进入插入模式。例:ctw 删除当前字符到w字符,进入插入模式

三、Vim练习

1、文本对象操作

ci{ ---> 删除{}内的内容,进入插入模式
    ci( ---> 删除()内的内容,进入插入模式
java

2、复制粘贴与寄存器的使用

  1. 复制粘贴
    - Normal模式
    - y(yank)复制,p(put)粘贴。注意:p向下复制,P向上复制
    - d(delete)剪切,p(put)粘贴
    - v(visual模式)选中
    - 配置文本对象:yiw 复制一个单词,yy复制一行
    - Insert 模式
    (注意)在vimrc中设置了autoindent,粘贴代码缩进混乱。解决方法::set paste 和 :set nopaste

    1. 寄存器
      "[reigster] —> 指定寄存器
      "+ —> 复制到系统剪贴板
      练习:
      "ayy —> 复制当前行的内容到a寄存器
      "byy
      :reg a —> 查看a寄存器的内容
      :reg b
      "ap —> 粘贴a寄存器的内容

3、Vim宏(macro)

宏的概念:
1. 宏可以看作是一系列操作的集合
2. 使用宏录制一系列操作,然后用于回放
3. 宏可以非常方便的把一系列命令用在多行文本上

- 使用q开始录制,使用q结束
    - 使用q{register}选择要保存的寄存器,把录制的命令保存其中
    - 使用@{register}回放寄存器中保存的一系列命令
   
    练习:使用宏批量给url添加双引号
        qa I"<Esc> A"<Esc> q ---> 开始录制名称为a的宏:行首插入"后返回Normal模式,行尾插入"后返回Normal模式,结束录制
        j V G ---> 下一行,选中当前行到文件结尾
        :normal @a ---> 执行宏a
   
        (方法2:不使用宏)
        V+G ---> 选中内容
        :normal I" ---> 行首插入"
        :<Ctrl-p> 修改I为A ---> Ctrl+p(上一条命令),修改I为A:行尾插入"
java

4、Vim补全

  • 使用 ctrl+n 和 ctrl+p 补全单词
    • 使用 ctrl+x ctrl+f 补全文件名
    • 使用 ctrl+x ctrl+o 补全代码,需要开启文件类型检查,安装插件
      练习:
    1. 单词补全
      self.d —> ctrl+n 弹出提示 —> 使用 ctrl+p 和 ctrl+n 进行上/下选择
    2. 文件名补全
      with open("./te —> ctrl+x ctrl+f —> 使用 ctrl+p 和 ctrl+n 进行上/下选择
      :r! echo % —> 文件名补全时,输出当前的文件名
      5、Vim 配色
    3. 命令
      • :colorscheme —> 显示当前的主题配色,默认是 default
      • :colorscheme <ctrl+d> —> 显示所有的配色
      • :colorscheme [配色名] —> 更换配色
    4. 从网上下载配色

四、常用操作

1、批量注释

// vim 批量注释:Ctrl+V 选择需要注释的行 —> I 输入 // —> Esc
Vim 批量操作:
1. 批量添加注释
示例文本:
test1
test2
test3

 1. 移动到行首,执行 Ctrl+V 进入视图模式,纵向选中 3 行
                2. 输入 I 进入插入模式并且跳转到行首,输入要添加的内容 //  
                3. 输入 Esc 回到普通模式
       
            2. 批量删除多行注释
                示例文本:
          	// test1
          	// test2
          	// test3
         
          1. Ctrl+V 进入列模式,选中需要删除的内容
          2. 按下 x 或者 d
java
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin