Linux个人笔记(二)之玩转Vim 从放弃到爱不释手

PegasusWang 玩转Vim 从放弃到爱不释手 课程笔记


文章目录

  • PegasusWang 玩转Vim 从放弃到爱不释手 课程笔记
  • 前言 资料推荐
  • 第1章 玩转Vim 从放弃到爱不释手
  • 第2章 初识 Vim 想说爱你不容易
    • 2-1 初识Vim
      • 开始编辑(insert模式、normal模式)
    • 2-2 为什么这么多模式
    • 2-3 Vim插入模式小技巧(终端)
    • 2-4 Vim快速移动大法
    • 2-5 Vim快速增删改查
      • Vim快速修改
      • Vim查询
    • 2-6 Vim如何搜索替换
    • 2-7 Vim多文件操作
    • 2-8 Vim的text object 文本对象
    • 2-9 Vim复制粘贴与寄存器的使用
    • 2-10 强大的Vim宏 (macro) 批量操作
    • 2-11 Vim补全大法
    • 2-12 Vim换配色
  • 第3章 编写Vim配置
    • 3-1 编写vim配置
    • 3-2 Vim映射
  • 第4章 Vim安装和使用插件
  • 第5章 与时俱进Vim
    • 实用指令
    • 文本信息配置
    • 快速定位(看/写代码神快捷)

前言 资料推荐

  • PegasusWang imooc 视频课程
  • bilibili TheCW的上古神奇
  • PegasusWang 知乎专栏
  • 简明vim练级攻略

  PegasusWang的课程我看了三四遍,第一遍草草而过 发现课程不错,值得细看细品,于是乎从头到尾一边看一边本机测试鬼操作,当时觉得很有帮助,对vim的使用也不仅仅停留在:wq i a 等很初级的命令,慢慢开始使用组合键,vimrc中开始设置快捷键、添加插件等。但时间一长 发现不整理一版笔记,总觉得不是自己的东西 若隐若现很有神秘感(意思就是记不住)。之所以强烈推荐这个课程,是因为我感觉非常适合入门观看,视频短、直入正题、课程编排合理、见效快 简直立竿见影,而且将每个指令都解释成英文形式 方便复杂的指令很容易记住。废话不多说,上笔记。

第1章 玩转Vim 从放弃到爱不释手

第2章 初识 Vim 想说爱你不容易

2-1 初识Vim

开始编辑(insert模式、normal模式)

key description 定义
i insert 当前字符前插入
a append 当前字符后添加
o open a line below 当前行下一行插入
O open a line above 当前行上一行插入
I insert before line 当前行行首插入
A append after line 当前行行尾插入

normal mode --> insert mode : a/i/o/A/I/O
insert mode --> normal mode : Esc
save: :wq (write and quit)

2-2 为什么这么多模式

  • 普通模式(normal)
  • 编辑(插入)模式
  • 可视化模式(visual): 一般用来块状选择文本
    • Normal模式下使用 v 进入visual选择 进行字符操作 增删改查复制
    • 使用 V 选择行 进行行操作 增删复制
    • 使用 ctrl+v 进行方块选择
    • test: v + h/j/k/l + d/y --> 删除/复制指定多个字符
  • cmd命令模式 Normal模式下输入 : 之后执行命令。 :wq
    • :vs (vertial split), :sp (split)
    • :%s/foo/bar/g 全局替换
    • :set nu set nonu 设置行号显示与否

2-3 Vim插入模式小技巧(终端)

  • ctrl+h 删除上一个字符
  • ctrl+w 删除上一个单词
  • ctrl+u 删除当前行 ( 以上三个快捷键在终端同样适用 ctrl+a 快速移动到开头 ctrl+e 快速移动到结尾 ctrl+b 向前移动 ctrl+f 向后移动
  • insert/normal模式快速切换
    • ctrl+c代替Esc(但可能会中断某些插件) ctrl+[
    • gi 快速跳转到你最后一次编辑的地方并进入插入模式

2-4 Vim快速移动大法

  • hjkl 左下上右
  • 单词间跳转
    • w/W移到下一个word/WORD开头。 e/E下一个word/WORD尾
    • b/B回到上一个word/WORD开头,可以理解为backword。(word指的是一非空白符分割的单词,WORD以空白符分割的单词)
  • 行间搜索移动
    • 同行快速移动
      • f{char} 移动到char字符上, t 移动到char的前一个字符。如果第一次没搜到,可以使用;,继续搜索该行下一个/上一个
      • F{char} 反过来搜
    • 水平移动
      • 0 移动到行首第一个字符,^移动到第一个非空白字符(0w
      • $ 移动到行尾, g_移动到行尾非空白字符
    • 垂直移动 () {} 不常用。
    • 页面移动
      • gg/G 移动到文件开头和结尾,可以使用ctrl+o 快速返回
      • H/M/L 跳转到屏幕开头 head,中间 middle和结尾 lower
      • ctrl+u ctrl+f 上下翻页,(upward/forward) zz把当前行置为屏幕中间

2-5 Vim快速增删改查

  • normal模式下使用 x快速删除当前一个字符 X 向前删除一个字符
  • 使用d(delete)配合文本对象快速删除一个单词 daw (d around word) diw不删旁边的空格 [自己添加: dwcw快速删除一个单词,不过必须在单词首字符;cw = dwi]
    • dt) (delete to )) 删除 ) 中的字符;
    • d$ 删除到行尾;
    • d0删除到行首
    • 3dd删除三行
    • 4x删除四个字符
  • dx可以搭配数字执行多次
  • v模式下进行批量删除 v+移动+d/x 删除

Vim快速修改

  • r replace normal模式使用r替换一个字符
  • R 替换当前光标的字符,直到按下Esc键
  • c change 配合文本对象 快速修改
    • cw change word 删除当前字母 进入插入模式 (当前字符开始删除到word结尾; 删除整个word需要在开头)
    • caw删除当前字母 进入插入模式
    • C 删除整行 进入插入模式
    • ct" 删除到“位置 进入插入模式
  • s substitute s替换并进入插入模式 S 删除整行并进入插入模式

Vim查询

  • /或者? 进行前向或者反向搜索
  • n/N 跳转到下一个或者上一个匹配
  • */# 进行当前单词的前向和后向匹配

搜索结果高亮显示:

  • :set hls high light search
  • :set incsearch include search 增量搜索,边搜索边高亮

2-6 Vim如何搜索替换

  • :[range]s[ubstitute]/{pattern}/{string}/[flags]
  • range表示范围 比如: 10,20表示10-20行,%表示全部
  • pattern是要替换的模式, string是替换后的文本
  • flags 替换的标志。
    • g (global) 表示全局范围内执行
    • c (confirm) 表示确认,可以确认或者拒绝修改
    • n (number)报告匹配到的次数而不替换,可以用来查询匹配次数

支持正则表达式,可精确的匹配整个单词 : %s/\/hehe/g

  • 替换命令 :s/old/new/g 替换所有的old
    :%s/old/new/gc : 替换整个文件中的所有old,但在每次出现时提示。
    :n,ms/old/new/g :替换行号n和m之间的所有old
    :%s/old/new/g : 替换整个文件中的所有old
  • :n1,n2s/old/new/g 在一定范围内替换指定字符串

2-7 Vim多文件操作

  • buffer 文件内存缓冲区
  • 窗口是buffer可视化的分割区域
  • tab可以 组织窗口为一个工作区
  • buffer之间切换
    • :ls 列举当前缓冲区
    • :bn 跳转到第n个缓冲区
    • :bp previous
    • :bn next
    • :bf first
    • :bl last
    • :b buffer_name 配合tab补全来跳转
  • Window窗口
    • ctrl+w s水平分割 :sp
    • ctrl+w v 垂直分割 :vs
  • 切换窗口
    • ctrl+w w在窗口间循环切换
    • ctrl+w h 切换到左边窗口
    • ctrl+w j 下边窗口
    • ctrl+w k 上边窗口
    • ctrl+w l 右边窗口
  • 重排窗口
    • ctrl+w = 所有窗口等宽 等高
    • ctrl+w _ 最大化活动窗口的高度
    • ctrl+w | 最大化活动窗口的宽度

2-8 Vim的text object 文本对象

  • dw

    • [number][text object] number表示次数, command命令,d(elete), c(hange), y(ank)
  • 文本对象 单词 w , 句子 s, 段落p

  • aw around word 不但会选中当前单词,还会包含当前单词之后的空格

  • iw inner word 如果键入viw,那么首先v将进入选择模式,然后iw将选中当前单词。

    • vi/ 选中/的内容,可配合 x进行删减
    • ci/ 删除/的内容,进入插入模式
    • va/ 选中/以及/的内容

2-9 Vim复制粘贴与寄存器的使用

  • insert模式下复制网页等其他地方代码到vim,如果设置了:set autoindent 会自动缩进,造成代码会乱。需要使用 :set paste,然后再进入insert模式;如果粘贴完需要自动缩进,需要执行:set nopaste。(后期可以用插件或者映射解决)

2-10 强大的Vim宏 (macro) 批量操作

  • 批量操作 行首行尾添加双引号(需要先用q录制操作到寄存器,然后回放@)
    • qa 寄存器名字为a,左下角显示 recording @a,执行添加操作;添加完成后按q结束录制。
    • @a 移动到其他行,回放寄存器a的操作
    • 通过V进行行批量选中,然后 : 会显示:'<,'> 接着写 normal @a进行批量回放 :'<,'>normal @a
  • 另种方法
    • V + G 选中所有行,冒号 :'<,'>normal I" :'<,'>normal A"

2-11 Vim补全大法

  • ctrl+n ctrl+p 普通关键字补全 (识别文件中匹配项,ctrl+n ctrl+p进行前后选择
  • ctrl+x ctrl+f 文件名补全 (识别路径下文件)
  • ctrl+x ctrl+o 全能补全 (需要开启filetype :filetype on 还需要插件)

2-12 Vim换配色

  • 使用:colorscheme 显示当前的主题配色,默认是default
  • 使用:colorscheme ctrl+d 可以显示所有的配色
  • 使用:colorscheme 配色名 修改配色
git clone https://github.com/flazz/vim-colorschemes
cp vim-colorschemes/colors/hybrid.vim ~/.vim/colors/

第3章 编写Vim配置

3-1 编写vim配置

  • vim ~/.vimrc
    https://github.com/amix/vimrc
    https://github.com/fatih/vim-go-tutorial/blob/master/vimrc

""""""""""""""""""""""
"      Settings      "
""""""""""""""""""""""
set number                      " Show line numbers 
set encoding=utf-8              " Set default encoding to UTF-8
set hlsearch                    " Highlight found searches
set incsearch                   " Shows the match while typing
set autoindent                  " Enable Autoindent
set autoread                    " Automatically read changed files
set laststatus=2                " Show status line always
set backspace=indent,eol,start  " Makes backspace key more powerful.
set showcmd                     " Show me what I'm typing
set tabstop=4                   " Set a tab equal to four spaces

" syntax on
" set foldmethod=indent
" 设置tab
" filetype on
" Colorscheme hybrid molokai default
syntax enable
set t_Co=256
let g:rehash256 = 1 
let g:molokai_original = 1 
colorscheme molokai

""""""""""""""""""""""
"      Mappings      "
""""""""""""""""""""""

" Set leader shortcut to a comma ','. By default it's the backslash
let mapleader=','
let g:mapleader=','

" 使用 leader+w 直接保存
inoremap w :w
noremap w :w
" 使用 jj 进入normal模式 
inoremap jj 

" user ctrl+h/j/k/l switch window
noremap  h
noremap  j
noremap  k
noremap  l

" 定义函数SeTitle, 自动插入文件头
"func SetTitle()
    "if &filetype == 'python'
        "call setline(1, "\#!/usr/bin/env python")
    "call setline(2, "\# -*- coding:utf-8 -*-")
    "normal G
    "normal o
    "normal o
    "call setline(5, "if __name__ == '__main__':")
    "call setline(6, "    pass")
    "endif
"endfunc

"""""""""""""""""""""
"      Plugins      "
"""""""""""""""""""""

:source ~/.vimrc

3-2 Vim映射

  • 基本映射
    • :map viw 空格实现vim功能,选中整个单词
    • :map dd 使用ctrl+d执行dd删除一行 :imap ddi
  • Vim常用模式 normal/visual/insert都可以定义映射
    • nmap/vmap/imap分别映射只在normal/visual/insert有效
    • :vmap \ U 把visual模式下选中的文本大小写转换(u/U转换大小写)

网络小书《笨方法学Vimscript》
《Practical Vim》

第4章 Vim安装和使用插件

  • 下载地址:https://vimawesome.com/或者github搜索
  • 格式
" :PlugInstall  :PlugClean  :PlugUpdate                                                     
call plug#begin('~/.vim/plugged')

call plug#end()

将vim插件按照vim-plug格式插入begin和end中。:PlugInstall 安装插件

  • air-line插件。功能:vim底部状态增强/美化插件。开启tab切换buffer中文件
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

" vim-airline plugin configuration
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#formatter = 'default'
nmap  :bn
  • youcompleteme (ycm)
" Plugin 1. 模糊搜索代码补全引擎
Plug 'valloric/youcompleteme'
  • vim-snazzy 主题
Plug 'connorholyday/vim-snazzy'

let g:SnazzyTransparent = 1
colorscheme snazzy
  • vim-startify 修改启动界面
Plug 'mhinz/vim-startify' 
  • indentline 缩进线显示 (对python比较实用)
Plug 'yggdroot/indentline'
  • nerdtree 文件目录树管理
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}                                    
  • easymotion 文本内快速查找
Plug 'easymotion/vim-easymotion'

nmap ss (easymotion-s2)
  • vim-surround
Plug 'tpope/vim-surround'

快捷键
ds (delete a surrounding)

ros::init(argc, argv, "slam_gmapping");

实现删除slam_gmapping旁边的双引号:光标移动到双引号内,ds + "
cs (change a surrounding)
实现替换双引号为单引号: 光标移动到双引号内,cs + " + '
ys (you add a surrounding)
实现slam_gmapping外添加中括号:光标移动到双引号内,ys + iw + ]

  • python-mode
  • neoformat python格式化, 需安装autopep8 pip install autopep8,具体使用 终端:Neoformat
Plug 'sbdchd/neoformat'
  • ale 错误检查
Plug `w0rp/ale`
  • vim-commentary 注释
Plug 'tpope/vim-commentary'                                                             

取消注释gcgc
gcc 注释单行
gc +块操作进行多行注释

第5章 与时俱进Vim

  • Tmux
  • neovim https://neovim.io/

实用指令

  • → 后台运行vim编辑器与 fg 配合使用,前后台切换
  • 自动提示:
  • 块操作: ,典型的操作: 0 I-- [ESC]
    • ^ → 到行头
    • → 开始块操作
    • → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
    • I-- [ESC] → I是插入,插入“–”,按ESC键来为每一行生效。
  • 可视化选择: v,V, 前面,我们看到了 ctrl+v的示例,我们可以使用 v 和 V。一但被选好了,你可以做下面的事:
    • J → 把所有的行连接起来(变成一行)
    • < 或 > → 左右缩进
    • = → 自动给缩进
      (v或者V 与< >配合直接进行单行缩进; 针对C/C++中自动缩进,可配合%查找{ } v/c+v + % + =自动缩进 )
  • unset VREP_ROOT 重置/删除env中某环境变量

文本信息配置

  • ctrl-g(正常模式下使用命令) 显示文件信息和当前行。

快速定位(看/写代码神快捷)

  • gd(正常模式下使用命令) 跳转到局部变量定义处。
  • gD(正常模式下使用命令) 跳转到全局标量定义处。
  • g*(正常模式下使用命令) 功能接近*,但是查找的目标不带<和>单词分界符号。
  • g#(正常模式下使用命令) 功能接近#,但是查找的目标不带<和>单词分界符号

你可能感兴趣的:(Linux)