快!用Vim

文章目录

  • 简介
  • 基操
    • 移动
    • 删改查
    • 搜索替换
    • 多文件操作
    • text object
    • 赋值粘贴
    • macro
    • 补全
    • 配色
  • 自定义配置
    • 映射
  • 插件
    • 常用插件
    • go
    • python
    • 浏览
    • 补全
    • 格式化
    • git
  • Tmux
  • neovim

简介

  • 在 Linux 平台使用 Vim 编辑器,成为NB Vimer
  • 安装 vim 就不介绍了

基操

  • 三种模式
    • insert
      a:  append
      i:	insert 光标处
      o:	open a line below
      A:	append after line
      I:	insert before line
      O:  append a line above
      
    • normal(default) / command
      # : 都是命令
      :w	#save
      :q	#quit
      :set nu	#line number
      :vs	#vertical split
      :sp	#split
      :% s/java/python #replace 'java' with 'python'
      u	#撤回上一步操作
      # command 不单独算作一种模式,因为他只能在 normal 或者 visual 模式的基础上执行,insert 模式下只能通过映射执行 command
      
    • visual
      v:	visual 选择字母
      V:	选中整行
      Ctrl+v:	块状选择
      
  • 出错了
    • 输入时,某个单词输错怎么办?
      快!用Vim_第1张图片
    • 相关快捷键
      ctrl+h	#删除字母
      ctrl+w	#删除单词
      ctrl+u	#删除当前行
      # 在terminal也可用
      
  • insert -> normal
    • ESC
    • ctrl+c
    • ctrl+[
    • 可以配置自己喜欢的键位
  • 回到上一次编辑的位置
    • 准确来说是上一次退出 insert 模式的位置:gi,继续编辑

移动

  • 均是在 normal 模式下
  • 快速移动
    • 上下左右
      快!用Vim_第2张图片
    • w/W 移动到下一个 word 开头,e/E 移动到下一个 word 结尾,b/B 回到上一个 word 开头
      • 小写表示以非空白符分割的单词,比如这句 java __! python go,还会移动到!
      • 大写表示以空白符分割的单词,只会移动到 j _ p g 前;不必纠结,能动就行
    • 0 行首,$行尾
    • gg文首,G文尾
  • 行间搜索移动
    • normal 模式下,f{char} 搜索并移动到 char 的位置,默认搜索光标往后的; ,前一个,;后一个
    • F{char} 往前搜,,后一个,;前一个
  • 页面移动
    • ctrl+f 向下翻页,ctrl+u 向上翻页
    • zz 把当前行滚动到屏幕(terminal)中间
    • H/M/L 光标移动到屏幕 开头/中间/结尾
  • 命令很多,不需要刻意记忆,经常使用即可!
    • 可以看到很多命令都是在 normal 模式下,大部分情况也都是在浏览,而非编辑

删改查

  • 都是在 normal 模式下
  • 删除
    • dw 删除单词(非空白符分割),diw 删除单词,保留空格
    • x 删除字符,可配合v 模式使用
    • dd 删除整行,ndd 删除 n 行
    • dt{char} 删除,直到 char 字符处(不包括char)
  • 修改
    • r 替换,例如:ra 将光标处字符替换成 a;R 打开替换模式
    • s 删除光标处字符并进入插入模式;S 删除整行并进入 insert 模式
    • cw 删除单词并进入 insert 模式
  • 查找
    /{string} 搜索字符串 string,n 搜下一处,N搜上一处
    * 当前单词的下一个匹配,#当前单词的上一个匹配

搜索替换

  • 命令模式下
  • 格式::[range]s/{pattern}/{string}[flags],range 表示替换范围,:10,20表示10-20行,%表示全部文本
  • 例如::20,23 s/python//n ,会显示匹配到多少行
    快!用Vim_第3张图片
  • 使用正则::25,27 s/\//n 完全匹配
    2
  • flag 还有cg模式,表示询问和全局替换;flag 可以不写
    快!用Vim_第4张图片

多文件操作

  • 几个概念
    • buffer:缓冲区
    • window:窗口,一个缓冲区可以存在于多个小窗口,大窗口(整个屏幕)可以打开不同的缓冲区
    • tab:标签页,分类文件
  • Buffer
    • 打开一个文件,其实就创建了一个缓冲区;使用 :e xxx.txt 就打开并进入另一个缓冲区;使用 :ls 查看
      快!用Vim_第5张图片
    • 跳转::b 1 跳转到第一个缓冲区;:blast 跳转到最后一个缓冲区;类似的还有 :bpre :bnext :bfirst
    • 窗口和缓冲区
      快!用Vim_第6张图片
    • buffer 可以和文件等价
  • Window
    • 分割方法前面说过,:vs:sp;还可以用 ctrl+w+v ctrl+w+s
    • 窗口间切换
      快!用Vim_第7张图片
    • 一个缓冲区可以存在于多个小窗口;但操作时都是同步的
      快!用Vim_第8张图片
    • 注:一个缓冲区只能有一个文件,如果使用 :vs xxx.txt 切开窗口打开其他文件,也会同时增加一个 buffer,只不过此时一个窗口包含了多个buffer
    • 窗口编排;好像没作用?
      快!用Vim_第9张图片
  • Tag
    • 相当于分类标签,将不同类的文件(buffer)聚在一起,在各自标签里可打开不同buffer(文件)切多个窗口;不常用
      快!用Vim_第10张图片
    • 使用 :tabnew hello.py 可以在新的标签打开文件
    • 常用命令
      快!用Vim_第11张图片
      快!用Vim_第12张图片

text object

  • 和主流编程语言的面向对象类似,vim 将文本视作对象,自然也就有操作对象的方法
  • 比如一个单词,一个句子,一段话都是对象,可以使用方法快速修改删除
  • 命令格式:[number]++模式+[text object]
    • command 包括:d(delete)/c(change)/y(yank)/v(visual)
    • text object 包括:w(word)/s(sentence)/p(paragraph)
  • 常用命令
    • viw 选中当前单词,不包括空格;vw会选中当前单词到下一个字符分割起始位置(一般不用)
      快!用Vim_第13张图片
    • 操作成对括号/引号中的内容;比如 vi" 快速选中当前位置双引号中的内容,ci" 快速删除双引号中的内容并进入 insert 模式
      快!用Vim_第14张图片

赋值粘贴

  • normal 模式
    快!用Vim_第15张图片
  • insert 模式,一般使用 ctrl+v
    快!用Vim_第16张图片
  • 删掉的东西放在寄存器
    快!用Vim_第17张图片
  • :reg a查看 a 寄存器保存的内容,"a p粘贴 a 中保存的内容
    快!用Vim_第18张图片
  • :set clipboard=unnamed 可以直接复制粘贴系统剪贴板

macro

  • 什么是宏
    快!用Vim_第19张图片
  • 如何录制并回放
    快!用Vim_第20张图片
  • 需求:给每行文本加上双引号
    • qa 使用 a 寄存器录制
    • I 加双引号,A 加双引号
    • q 退出录制
    • 到下一行,VG全选
    • :normal @a 在选中行回放
  • 上面在命令行模式下执行了 normal 模式的命令,我们完全可以使用这种方式完成需求
    • VG
    • :normal I" 给所选行开头加双引号
    • : ctrl+p 回到上一个命令
    • 改为 A" 给末尾加上双引号

补全

  • ctrl+n 根据文件中已存在的单词补全;如果有多个匹配项会提示,ctrl+p 选择下一个
    1
    快!用Vim_第21张图片
  • ctrl+x+f 列出路径下的文件(夹)
    快!用Vim_第22张图片

配色

  • 现在的编辑器都支持更换主题,Vim 也不落后
    快!用Vim_第23张图片
  • 举例
    快!用Vim_第24张图片
  • 可以自己下载配色并使用,有教程
    快!用Vim_第25张图片
    快!用Vim_第26张图片

自定义配置

  • 什么是 Vim 配置
    快!用Vim_第27张图片
  • 编辑文件 ~/.vimrc,可以在编辑时就让这个文件生效::source ~/.vimrc
    set nu 
    syntax on 	# 语法高亮
    colorscheme freya 	# 主题
    set hlsearch 	# 高亮搜索
    set foldmethod=indent 	# 方法折叠
    set pastetoggle=<F2> 	# F2进入剪贴板粘贴模式,默认是autoindent
    inoremap jj <Esc>`^	# 映射,后面会讲;使用 jj 代替 Esc
    noremap <C-h> <C-w>h	# 分屏的光标移动
    noremap <C-l> <C-w>l
    noremap <C-j> <C-w>j
    noremap <C-k> <C-w>k
    
  • 效果
    快!用Vim_第28张图片

映射

  • 映射非常强大且复杂,掌握一些常见用法即可
  • 基本映射
    快!用Vim_第29张图片
  • 模式映射;例如在insert模式下使用normal的命令::imap ddi ctrl+d 删除一行(回到normal再回来)
    2
  • 注:要注意递归映射映射冲突
    快!用Vim_第30张图片
  • 非递归映射:no recursion map
    快!用Vim_第31张图片
  • 总而言之,只能用 nnoremap/vnoremap/inoremap

插件

  • 什么是插件
    快!用Vim_第32张图片
  • 安装 vim-plug 插件管理器
    快!用Vim_第33张图片
  • 参考官方给的 Usage,只保留这两行
    快!用Vim_第34张图片
  • 第一个插件
    • vim-startify,开屏工具
    • 修改配置文件并生效::source ~/.vimrc,安装::PlugInstall
      快!用Vim_第35张图片
    • 就是把需要安装的插件加入插件列表即可,非常简单
    • 直接通过 vim 命令就可以看到效果
      快!用Vim_第36张图片
  • 如何寻找需要的插件?常用的三种方式,推荐第二种;一般先有需求,再找插件
    快!用Vim_第37张图片

常用插件

  • 美化插件
    • 良好的布局和配色让我们身心愉悦
    • 上面安装的 vim-startify 美化了启动界面
    • vim-airline,美化状态栏
      快!用Vim_第38张图片
      2
    • indentline 代码缩进线
      快!用Vim_第39张图片
    • hybrid 主题配色;~/.vimrc 添加 colorscheme hybrid
      快!用Vim_第40张图片
  • 文件目录插件
    • nerdtree 目录树
    • vim 然后 :NERDTree,就可以看到目录
      快!用Vim_第41张图片
    • 每次敲命令太麻烦,加一些配置,就可以用 ctrl+t 打开目录,并显示隐藏文件
      快!用Vim_第42张图片
    • ,+n 从打开文件中返回目录树,ctrl+w+p 再返回文件
    • 可以添加配置 autocmd VimEnter * NERDTree 让我们打开文件时就出现目录树
    • 如何通过搜索快速找到文件?安装 ctrlp
    • 配置:let g:ctrlp_map = '' 使用 ctrl+p 开始搜索,打开文件后使用 ctrl+f 定位到目录树
      快!用Vim_第43张图片
  • 跳转插件
    • 在文件内快速跳转到某一处,可以使用移动命令,或者 / 搜索
    • 这里使用插件:easymotion,添加配置:nmap ss (easymotion-s2)
    • 直接输入 ss 即可开始搜索,高亮出匹配的位置
  • 成对编辑插件
    • normal 模式下修改成对的内容,比如双引号
    • vim-surround
    • ys iw " 给选中单词加双引号(you add a surrounding),其实是使用了 visual 模式
    • cs " ' 替换为单引号
    • ds " 删除双引号
  • 模糊搜索插件
    • 在项目中搜索一些文本,这里使用 fzf
    • 我们要安装 fzf 和 fzf.vim
    • 使用:vim:Ag [pattern] 模糊搜索字符串,使用::Files [path] 模糊搜索目录(相当于前面的 ctrl+p)
  • 搜索替换插件
    • far
    • 使用:替换后会有预览,确认无误后 Fardo
      :Far foo bar **/*.py
      :Fardo
      

go

  • 写 go 代码的插件 vim-go
  • 使用教程
    • 重构
    • 自动导入
    • 自动格式化
    • 跳转
    • 代码补全

python

  • jedi-vim 或者 python-mode
  • python-mode 支持的一些配置;ctrl+] 跳转到定义处
    快!用Vim_第44张图片
  • 用起来,才能遇到问题,才能熟练

浏览

  • 代码大纲插件,tagbar,还需要安装依赖 Universal Ctags
  • 使用 :TagbarToggle 召唤出右侧大纲
    快!用Vim_第45张图片
  • 高亮单词插件 lfv89
  • k 高亮所在单词,K 取消高亮

补全

  • 前面介绍了不同编程语言的插件,提供了补全功能
  • 这里介绍一个通用的代码补全插件,deoplete,再配合对应语言的扩展即可
  • 例如要补全 python 代码,还需安装
    pip3 install --user jedi --upgrade
    # Vim-Plug
    NeoBundle 'deoplete-plugins/deoplete-jedi'
    # or
    Plug 'deoplete-plugins/deoplete-jedi'
    
  • 还有一个比较火的补全插件,coc

格式化

  • 通用代码格式化插件 neoformat
  • 例如 pip 安装 autopep8 格式化 python 代码,打开文件使用 :Neoformat
    let g:neoformat_python_autopep8 = {
                \ 'exe': 'autopep8',
                \ 'args': ['-s 4', '-E'],
                \ 'replace': 1, " replace the file, instead of updating buffer (default: 0)
                \ 'stdin': 1, " send data to stdin of formatter (default: 0)
                \ 'env': ["DEBUG=1"], " prepend environment variables to formatter command
                \ 'valid_exit_codes': [0, 23],
                \ 'no_append': 1,
                \ }
    
    let g:neoformat_enabled_python = ['autopep8']
    
  • 通用静态检查插件 ale
  • 如果想检查 python,还需要安装 pylint;但是 pylint 的检查很严格,可以修改配置忽略一些错误
  • 代码注释插件:vim-commentary,使用 gc 即可注释或取消注释

git

  • 在 vim 中使用 git 的插件:fugitive
  • 使用也很简单,:Gblame:Gdiff:Gcommit
  • 另一个插件:gitgutter,可以标记出修改、新增等
  • 第三个插件:gv.vim,使用::GV 就可以看到提交信息
    快!用Vim_第46张图片
  • 到此,介绍了很多插件,也还有很多好用的插件没提到,但是这个东西不在于多而在于满足自己的需求,经常使用达到熟练,提高效率才是目的

Tmux

  • 分屏,托管进程;可以让我们在一个窗口操作多个进程
  • 使用手册
    快!用Vim_第47张图片
  • 也可以将 vim 嵌入到开发工具中,比如 pycharm,vscode等
    快!用Vim_第48张图片

neovim

  • 原始的 vim 代码老旧,不支持异步等
  • 所以有了搞了 Neovim,官网,可以尝试使用
  • 还有一些大佬写好的 Vim 配置
    • SpaceVim
    • vim-config
  • 抛砖引玉,有好的建议或者配置可以评论分享

你可能感兴趣的:(Perl,vim,linux,Neovim,插件)