vim 小总结

vi/vim的介绍及相关命令

在介绍vi/vim的相关命令前,先来了解下什么是vi/vim?为何学习vi/vim?html

什么是vi/vim?linux

  • vi 是Visual Interface的缩写,即 可视化接口
  • vim是vi iMprove的缩写,即vi的加强版 (具备语法着色功能),Vim是从 vi 发展出来的一个文本编辑器。

为何学习vi/vim?git

  1. 全部的Unix系统上都会默认内置vi/vim编辑器,而不必定带有其余文本编辑器,很是通用;
  2. 不少软件的编辑接口都会默认调用vi/vim;
  3. vi/vim具备程序编辑的能力;
  4. vi/vim程序简单,编辑速度至关快速

vi和vim有什么区别?github

  1. 多级撤销:在vi编辑器中,按u只能撤消上次命令,而在vim里能够无限制的撤消
  2. vi编辑器只能运行于unix中,而vim不只能够运行于unix,还可用于windows、mac等多操做平台
  3. vim能够用不一样的颜色来加亮你的代码
  4. 能够把vim当成vi来使用

因为vi与vim在命令上几乎相同,因此这里以vim为例,目前咱们使用较多的也是vim编辑器。shell

vim的4种模式

进入vim模式:在终端里打 vim 回车。vim

vim一共有4个模式。经常使用是normalinsert模式, 大部分时候都在两个模式下来回切换windows

模式 英文名 描述 切换操做
正常模式 normal-mode 用于查看文本,也可复制、粘贴、撤销、重作等 - 默认进入的是正常模式
- 不论位于什么模式,按下<Esc>键(有时须要按两下)都会进入正常模式
插入模式 insert-mode 也即编辑模式,用于编辑文本 - 正常模式下,按下i, a, o, I,A,O键,进入插入模式
命令模式 normal-mode 用于输入指令
如:保存、运行、切换标签、切割屏幕等
- 正常模式下,按下:(英文冒号)键,进入命令模式
可视模式 visual-mode 至关于高亮选取文本后的正常模式
可视模式中的操做有些像拿鼠标进行操做
- 在正常模式下,按下v,V,<ctrl>+v,能够进入可视模式

退出vim

指令 描述
:q 直接退出(无更改)
:wq 保存退出
:q! 放弃修改,强行退出

一、-normal- 正常模式下

启动vim后默认位于正常模式。不论位于什么模式,通常状况,按下<Esc>键(有时须要按两下)都会进入normal(正常)模式。bash

正常模式通常用于浏览文件,也包括一些复制、粘贴、删除等操做。app

在VIM的Normal模式下,全部的键就是功能键了less

返回 Normal 模式,请按 ESC

返回 Insert 模式,请按 i

  1. 插入/删除

    keys 效果 keys 效果
    a 光标以后插入 A 行尾插入
    o 下一行插入 O 上一行插入
    i 光标以前插入 I 行首插入
    s 删除字符插入 S 删除正行插入
    dd 删除一行,并把删除的行存到剪贴板里 "cc"或者"S" 删除后进入插入-insert-模式
    dw 删除一个单词 cw 删除一个单词进入插入-insert-模式
    x 或 dl 删除一个字符 s 或 cl 删除一个字符进入插入模式
    cw 替换从光标所在位置后到一个单词结尾的字符 "D"或"C" 删除到行尾能够
    dt" 删除全部的内容,直到遇到双引号—— "
    u 撤销 ctrl + r 重作
  2. 拷贝/黏贴/删除

    keys 效果
    y 复制 当前光标所在的一个字符
    x 剪切 当前光标所在的一个字符
    p 粘贴
    xp 交换两个字符
    ddp 交换两行
    yy 拷贝当前行当行于 ddP
    0y$ 0y$ 命令意味着:0 先到行头,y 从这里开始拷贝,$ 拷贝到本行最后一个字符
    ye 从当前位置拷贝到本单词的最后一个字符
    y2/foo 拷贝2个 “foo” 之间的字符串
    dt" 删除全部的内容,直到遇到双引号—— "

    还有不少时间并不必定你就必定要按y才会拷贝,下面的命令也会被拷贝:

    • d (删除 )
    • v (可视化的选择)
    • gU (变大写)
    • gu (变小写)
  3. 光标的移动

    keys 效果
    k l j h 上右下左(↑→↓←) ` 移动到上次编辑文件的位置
    gg 跳到文件开头 G 跳到文件尾
    { 移动到段首 } 移动到段尾
    b 跳到上一个单词的开头 J 合并两行
    e 跳到下一个单词的结尾 w 跳到下一个单词的开头
    0 数字零,到行头 $ 到本行行尾
    ^ 到本行第一个非blank(空格,tab,换行,回车等)字符的位置 ngg 或 nG 或 :n 跳到第n行
    L 移动到底部 L 移动到底部
    H 移动光标到屏幕顶端 M 移动到屏幕中间
  4. 选中

    keys 做用
    v+w 打开选中模式,并向后移动一个单词
    v+b 打开选中模型,并向前移动一个单词
    v+i+w 打开选中模式,并选中当前单词
  5. 修改

    keys 说明
    d s <existing char> 删除两边的指定字符
    c s <existing char> <desired char> 修改两边的指定字符
    y s <motion> <desired char> 修改两边字符
    S <desired char> visual modes 选中指定字符中间的内容
  6. 格式

    • " >>"缩进全部选择的代码
    • "<<" 反缩进全部选择的代码
    • 合并两行" J"
  7. 打开、保存、退出、改变文件

    keys 效果
    :e <path/to/file> → 打开一个文件
    :w 存盘
    :saveas <path/to/file> 另存为 `<path/to/file>
    :xZZ:wq 保存并退出 (:x 表示仅在须要时保存,ZZ不须要输入冒号并回车)(:w 存盘, :q 退出) (陈皓注::w 后能够跟文件名)
    :q! 退出不保存
    :qa! 强行退出全部的正在编辑的文件,就算别的文件有更改。
    :bn:bp 你能够同时打开不少文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
    :help | 显示相关命令的帮助。你也能够就输入:help` 而不跟命令。(陈皓注:退出帮助须要输入:q)
    :e! 若不想保存文件,而从新打开
    :e filename 若想打开新文件
    ctrl + ^ 进行文件切换
  8. 代码注释

    gc 打开或关闭注释 //
    gcc 打开或关闭某一行代码注释 //
    gc2j 打开或关闭两行代码注释
    gC 块代码注释
    gCi) 注释 括号()中的代码
  9. 其余

    • gd - Go to definition, 跳转到定义。
    • gb - af - VISUAL 模式命令, 依据语法分析, 将选择区域向外扩展。
    • gh - 等同于将鼠标移至光标所在单词, 方便查看定义以及报错。
    • :set nu 显示行号
    • :set nonu 不显示行号
    • :nohl 不高亮显示

二、–insert– 插入模式下

所谓插入模式就是进入到一个能够编辑文本文档的模式,常规的方式就是按小i进入编辑模式,左下角显示“--insert插入--”状态。

在 normal 模式下转 insert 模式,有三种途径。

  • a 光标以后插入, A 行尾插入。
  • i 光标以前插入, I 行首插入。
  • o 下一行插入 ,O 上一行插入。

删除

操做 效果
ctrl+h 删除前一个字符
ctrl+w 删除前一个单词
ctrl+u 删除前面一行全部字符

三、-command- 命令模式

在normal(正常)模式中,按下:(冒号)键,会进入命令模式

在命令模式中能够执行一些输入并执行一些vim或插件提供的指令,就像在shell里同样。这些指令包括 设置环境、文件操做、调用某个功能等等。

以:冒号开头的命令

操做 效果 操做 效果
:wq 或:x 保存退出 :set nu 显示行号
:wq! 强制保存退出 :set nonu 不显示行号
:q! 强制退出 :nohl 不高亮显示

注意::wq 或:x 都是保存退出,相似wq 若是在更改文件以后去操做2者的效果彻底相同。

可是有一种状况不一样,若是文件仅仅只是打开只看了一眼,这个时候使用wq会修改Mtime,更改为文件查看的那一刻,也就是输入wq那个时间。若是使用x那么就不会更改Mtime时间

四、-visual- 可视模式

在正常模式按下v, V, <Ctrl>+v,能够进入可视模式。

可视模式中的操做有点像拿鼠标进行操做,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。

可视块模式有一个很好的使用:多选注释 加注释 :

  • 移动光标,选中的位置会有高亮显示
  • shift + i,进入 insert 模式
  • 输入//
  • esc

去注释 :

  • 移动光标,选中的位置会有高亮显示
  • 按d

小技巧

vim的资源占用

近期笔者发现VSCode在vim 模式下CPU占用常常是200%左右,卡顿很是严重,看了官方issue。 关闭easymotion 和 statusbarcolorcontrol 能够解决此问题。

"vim.easymotion": false,
  "vim.statusBarColorControl": false
复制代码

中文输入法切换问题

vim 经常使用是normal 和 insert 模式。 大部分时候都在两个模式下来回切换,若是在insert 模式下是中文输入,按esc 或者 ctrl+[ 切到了 normal 模式,这个时候问题来了,须要手动切换输入法到英文,不然会弹出中文提示。 还好官方给出了解决方案:

  1. 安装 im-select: Switch your input method from terminal
  2. 修改配置
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.US",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}"
复制代码

须要注意的是,mac下须要查明模式英文输入法是US 仍是British ,而后修改defaultIM这个设置,不然会不起做用。

复制黏贴

在vscode下面,咱们只须要对vim的相关配置进行设置就行。具体以下: 在【首选项】中进行设置。

"vim.useSystemClipboard": true
复制代码

进行了上面的设置以后。就可使用系统的剪切板了。

配置

到用户目录下新建文件为 .vimrc,而后在其中写下以下配置

syntax enable           //语法高亮                     
set number              //显示行号
set cursorline          //突出显示当前行
set ruler               //打开状态栏标尺
set shiftwidth=4        //设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4       //使得按退格键时能够一次删掉 4 个空格
set tabstop=4           //设定 tab 长度为 4
复制代码

vim引自

简明 VIM 练级攻略

vim配置

VSCode里面配置vim

vim命令大全

附:Linux的经常使用命令

几个经常使用的Linux命令以下:

文件和目录

  1. cd 命令,用于切换当前目录,它的参数是要切换到的目录的路径,能够是绝对路径,也能够是相对路径

    cd /home 	||进入 '/ home' 目录' cd .. ||返回上一级目录 cd ../.. ||返回上两级目录 cd ||进入我的的主目录 cd ~user1 ||进入我的的主目录 cd - ||返回上次所在的目录 复制代码
  2. ls 命令,查看文件与目录的命令,list之意,它的参数很是多,下面列出一些经常使用的:

    ls 	||查看目录中的文件 
    ls -F 	||查看目录中的文件 
    ls -l 	||显示文件和目录的详细资料 
    ls -a 	||显示隐藏文件 
    ls -d 	||仅列出目录自己,而不是列出目录的文件数据  
    ls -h 	||将文件容量以较易读的方式(GB,kB等)列出来  
    ls -R 	||连同子目录的内容一块儿列出(递归列出),等于该目录下的全部文件都会显示出来  
    ls -lR 	||以长数据串的形式列出当前目录下的全部文件  
    ls *[0-9]* 	||显示包含数字的文件名和目录名 
    复制代码
  3. mkdir 命令,

    mkdir dir1 	||建立一个叫作 'dir1' 的目录' mkdir dir1 dir2 ||同时建立两个目录 mkdir -p /tmp/dir1/dir2 ||建立一个目录树 复制代码
  4. cp 命令,该命令用于复制文件,copy之意,它还能够把多个文件一次性地复制到一个目录下

    cp file1 file2 	||复制一个文件 
    cp dir/* . 	||复制一个目录下的全部文件到当前工做目录 
    cp -a 	||将文件的特性一块儿复制  
    cp -a /tmp/dir1 . 	||复制一个目录到当前工做目录 
    cp -a dir1 dir2 	||连同文件的全部特性把文件dir1复制成文件dir2
    cp -p 	||连同文件的属性一块儿复制,而非使用默认方式,与-a类似,经常使用于备份  
    cp -i 	||若目标文件已经存在时,在覆盖时会先询问操做的进行  
    cp -r 	||递归持续复制,用于目录的复制行为  
    cp -u 	||目标文件与源文件有差别时才会复制  
    复制代码
  5. mv 命令,该命令用于移动文件、目录或改名,move之意

    mv dir1 new_dir 	||重命名/移动 一个目录,把dir1重命名为new_dir
    mv -f 	||force强制的意思,若是目标文件已经存在,不会询问而直接覆盖  
    mv -i 	||若目标文件已经存在,就会询问是否覆盖  
    mv -u 	||若目标文件已经存在,且比目标文件新,才会更新  
    复制代码
  6. rm 命令,用于删除文件或目录,remove之间

    rm -f  	||就是force的意思,忽略不存在的文件,不会出现警告消息 
    rm -i file	||删除文件file,在删除以前会询问是否进行该操做   
    rm -i 	||互动模式,在删除前会询问用户是否操做  
    rm -r 	||递归删除,最经常使用于目录删除,它是一个很是危险的参数  
    rm -rf dir1 	||删除一个叫作 'dir1' 的目录并同时删除其内容 
    rm -rf dir1 dir2 	||同时删除两个目录及它们的内容 
    复制代码
  7. find 命令,是一个基于查找的功能很是强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,因此在这里将给把它们分类列出:

    # 与时间有关的参数: 
    find -mtime n 	||n为数字,意思为在n天以前的“一天内”被更改过的文件;  
    find -mtime +n 	||列出在n天以前(不含n天自己)被更改过的文件名;  
    find -mtime -n 	||列出在n天以内(含n天自己)被更改过的文件名;  
    find -newer file 	||列出比file还要新的文件名  
    # 例如: 
    find /root -mtime 0 # 在当前目录下查找今天以内有改动的文件 
      
    # 与用户或用户组名有关的参数: 
    find -user name 	||列出文件全部者为name的文件  
    find -group name 	||列出文件所属用户组为name的文件  
    find -uid n 	||列出文件全部者为用户ID为n的文件  
    find -gid n 	||列出文件所属用户组为用户组ID为n的文件  
    # 例如: 
    find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出全部者为ljianhui的文件 
      
    # 与文件权限及名称有关的参数: 
    find -name filename 	||找出文件名为filename的文件  
    find -size [+-]SIZE 	||找出比SIZE还要大(+)或小(-)的文件  
    find -tpye TYPE 	||查找文件的类型为TYPE的文件,TYPE的值主要有:通常文件(f)、设备文件(b、c)、  
                 目录(d)、链接文件(l)、socket(s)、FIFO管道文件(p);  
    find -perm mode 	||查找文件权限恰好等于mode的文件,mode用数字表示,如0755;  
    find -perm -mode 	||查找文件权限必需要所有包括mode权限的文件,mode用数字表示  
    find -perm +mode 	||查找文件权限包含任一mode的权限的文件,mode用数字表示  
    # 例如: 
    find / -name passwd # 查找文件名为passwd的文件 
    find . -perm 0755 # 查找当前目录中文件权限的0755的文件 
    find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte 
    复制代码
  8. pwd 命令,显示工做路径

  9. tree 命令,显示文件和目录由根目录开始的树形结构(1)

  10. lstree 命令,显示文件和目录由根目录开始的树形结构(2)

  11. ln -s file1 lnk1 命令,建立一个指向文件或目录的软连接

  12. ln file1 lnk1 命令,建立一个指向文件或目录的物理连接

  13. cat命令,用于查看文本文件的内容,后接要查看的文件名,一般可用管道与more和less一块儿使用,从而能够一页页地查看数据。

    cat text | less 	||查看text文件中的内容  
    # 注:这条命令也可使用less text来代替 
    复制代码

摘自linux最经常使用的20个命令

相关文章
相关标签/搜索