09月23, 2022

Vim学习

码农对于Vim的评价褒贬不一,有人觉得喜欢 Vim 的人都是编程上找不到自信,只有拿 Vim 装逼找存在的,有人觉得Vim是编辑器之神......。前段时间在学习missing-semester简单接触过Vim,但是后来就荒废了,写这篇文章就是想在项目中实践一下Vim,再来评价它。

Vim四种模式

  1. 普通模式
  2. 命令模式
  3. 插入模式
  4. 可视化模式

Vim常用命令

插入命令

  1. a (append) A(append after line)
  2. i (insert) I(Insert before line)
  3. o (open new line) O(append line on)

删除

  1. ctrl+h 删除上一个字符
  2. ctrl+w 删除上一个单词
  3. ctrl+u 删除 当前行

    以上三个可以用于终端

快速切换插入模式和普通模式

  1. esc不太方面使用,将esc绑定到jj。 **
  2. gi可以快速切回到上次插入模式的位置。

快速移动

  1. w/W: 移动到下一个word/WORD 开头。**
  2. e/E: 移动到下一个 word/WORD 结尾
  3. b/B: 移动到上一个 word/WORD 开头 (backword) **

    word以非空白字符分割单词;WORD以空白字符分割单词。

行间搜索移动

  1. f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符
  2. F{char}: 当前光标往前搜索字符
  3. 0: 移动到行首第一个字符
  4. ^: 移动到第一个非空白字符 **
  5. $: 移动到行尾 **
  6. g_: 移动到行尾非空白字符

页面移动

  1. gg: 文件开头
  2. G: 文件结尾
  3. H: 屏幕的开头(Head)
  4. M: 屏幕的中间(Middle)
  5. L: 屏幕的结尾(Lower)
  6. crtl+u: 上翻页(upword)
  7. ctrl+f: 下翻页(forword)
  8. zz: 屏幕置为中间

Vim删除

vim删除主要是dx

  1. d删除一个单词。**
    • dd删除一行;2dd删除两行。
    • dw删除一个单词;daw删除一个单词包括空白字符。
    • dt{char}删除直到{char}字符。
    • d^和d$x
  2. x删除一个字符。

快速修改

  1. r替换一个字符。
  2. s替换一个字符并进入插入模式。
  3. c和d用法相似,但是会进入插入模式。** C删除整行进入插入模式。

搜索

  1. n/N跳转到下一个或上一个匹配。
  2. *或#选中,进行前后向匹配。
  3. /或?进行前向或者反向搜索。

文本替换

  1. :[range]s[sustitute]/{pattern}/{string}/[flags]
  2. range表示范围:10,20行,%表示全部。

buffer切换

  1. :ls列举缓冲区 :b n跳转第n个缓冲区。
  2. :bpre :bnext :bfirst :blast
  3. :b buffer_name tab补全

Window窗口

  1. :sp :vs 水平垂直分割。
  2. w循环切换。
  3. h左边切换。
  4. j下边切换。
  5. k上边切换。
  6. l右边循环切换。

文本对象

  1. 单词w。
  2. 句子s。
  3. 段落p。

文本对象操作方式

[number][text object]

  1. command是命令,d(elete),c(hange),y(yank)
  2. text object,单词w,句子s,段落p。

下图为text object一些实例。

操作""[]{}内容

  1. 选中:vi"。
  2. 删除:ci"。

复制和粘贴

Normal模式

  1. y(yank)复制。
    • yiw复制一个单词。
    • yy复制一行。
  2. p(paste) 粘贴。

    Insert模式

    • 粘贴command+v。
    • 很多人在vimrc中设置了autoindent,粘贴代码后所见错乱。
    • :set paste 和:set nopaste解决。

      后续有插件解决粘贴代码错乱问题。

深入寄存器

Vim不使用剪贴板进行复制与粘贴,而是多组寄存器。

  • 通过"{register}指定寄存器。
  • "ayiw复制一个单词到寄存器a,"ap可以取出。

常见寄存器

  • 复制专用寄存器,"0 使用y复制文本同时会被拷贝到复制寄存器0。
  • 系统剪贴板 "+。
  • “%当前文件名,".上次插入的文本。

  1. Vim使用q来录制,同时也是q结束录制。
  2. 使用q{register}选择要保存的寄存器,把录制的命令保存其中。
  3. 使用@{register}回放命令。

补全

  1. ctrl+n和ctrl+p补全单词。
  2. ctrl+x ctrl+f补全文件名。
  3. ctrl+x ctrl+o全能补全,需要开启文件类型检查安装插件。

Vim更换配色

  1. 使用:colorscheme 显示当前主题颜色。
  2. 使用:colorscheme <control+d>显示所有配色。
  3. 使用:colorscheme 配色名修改配色。

    也可以去网上搜索配色方案。

Vim配置

" 常用设置
" 设置行号
set number
colorscheme default
" 按F2进入粘贴模式
set pastetoggle=<D-2>
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent
" 高亮代码
syntax on
" 直接复制到剪贴板
set clipboard=unnamed

" 一些方便的映射
let mapleader=','
let g:mapleader=','
" 使用jj进入normal模式
inoremap jj <Esc>`^
" 使用leader+w 直接保存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>w :w<cr>
" 切换buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
" use ctrl+h/j/k/L switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" Sudo to write
cnoremap w!! w !sudo tee % >/dev/null
" json格式化
com! FormatJSON %!python3 -m json.tool

" nerdtree settings
nnoremap <leader>v :NERDTreeFind<cr>
nnoremap <leader>g :NERDTreeToggle<cr>
" set width
let NERDTreeWinSize=31
" show hidden files
let NERDTreeShowHidden=1
" not show files listed
let NERDTreeIgnore= [
             \ '\.git$', '\.hg$', '\.svn$', '\.stversions$', '\.pyc$', '\.pyo$', '\.swp$',
             \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$',
             \ ]

" ctrlp
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'
" easymotion
nmap ss <Plug>(easymotion-s2)
" 插件
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'preservim/nerdtree'
Plug 'kien/ctrlp.vim'
Plug 'easymotion/vim-easymotion'
Plug 'tpope/vim-surround'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }

call plug#end()

Vim插件

preservim/nerdtree

  1. ,+ g打开、关闭。
  2. , + v定位文件。

kien/ctrlp.vim

ctrl+p模糊匹配搜索。

easymotion/vim-easymotion

ss搜索。

Vim-surround

normal模式增加,删除,修改成对内容。

  1. ds(delete a surrounding)ds"。
  2. cs (change a surrounding)cs"'。
  3. ys(you add a surrounding) ysiw"。

junegunn/fzf.vim

模糊搜索文件名和文件字符串。

  1. Ag [PATTERN]模糊搜索字符串。
  2. Files [PATH]模糊搜索目录。

brooth/far.vim

:Far foo bar **/*.py
:Fardo

本文链接:https://imyoyo.xyz/post/learning-of-vue.html

-- EOF --

Comments