1. Vim介绍

Vim是Vi增强版(Vi IMproved),是一款文本编辑器,配合插件使用,非常强大,绝不逊于IDE。

YouCompleteMe

(1)使用Vim必要性

  • 提升效率:用命令代替鼠标操作,手不用离开键盘,极大提升效率。很多软件(谷歌浏览器、Sublime)可以安装Vim插件

  • 远程登录服务器,服务器几乎不会装图形化界面

  • 开拓视野,集成开发环境真的是最适合代码编辑器吗

2. Vim基本使用

Vim功能非常强大,如果配置得好,功能不会逊色于IDE。

Vim键盘图:

vim-keyboard

(1)进入与退出

  • 进入Vim:vim filename,按回车

  • 退出vim

    • :w 当前的内容保存

    • :wq 保存退出vi

    • :q! 放弃存盘退出

    • zz 仅把修改过的内容存盘

    • :n1[,n2] w filename 把第n1行到n2行写入文件

(2)两种模式切换

Vim有两种模式:命令模式和编辑模式。

  • 命令模式 --> 编辑模式,i, I, a, A, o, O
  • 编辑模式 --> 命令模式,按Esc退出编辑模式

(3)移动光标

向左、下、上、右移动光标,有两种:

  • h j k l

  • →↓↑←

vim-movement

尽管用方向键也能移动光标,但建议还是使用hjkl,因为手不用离开主键盘,提升效率。

更多移动光标方法:

  • gg 到第一行

  • G 到最后一行 (:$ )

  • { 段首

  • } 段尾

  • w 下一个单词(W)

  • e 词尾(E)

  • Ctrl + f 向下滚动一屏

  • Ctrl + b 向上滚动一屏

  • :n 光标移动到第n行

(4)插入文本

插入(insert)

  • i 在当前位置插入

  • I 在当前行前插入

添加(append)

  • a 在当前光标后增加

  • A 在当前行后增加

Oo

  • o 在当前光标所在行后增加一行

  • O 在当前光标所在行前增加一行插入

(5)删除

  • x 删除光标处一个字符
  • X 删除当前字符的前一个字符
  • D 删除光标后该行的所有字符 (d$
  • [n]dd 从光标所在行开始,删除n行
  • s 删除光标所在字符,进入输入模式
  • S 删除光标所在行,进入输入模式

混合命令

  • dh 删除前一个字符
  • dl 删除当前字符, dl=x
  • dj 删除上一行
  • dk 删除下一行

(6)替换文本

  • r 替换字符,只替换单个字符
  • R 替换模式,替换光标后面的字符
  • cc 替代行中的所有字符
  • C 替代行中剩余的所有字符

(7)复制、粘贴

  • [n]yy 复制n行
  • P 在光标后插入临时缓冲区的内容

(8)撤消和恢复

  • u 撤消undo
  • ctrl+r 恢复redo

(9)查找与替换

查找/string?string

  • n 下一个
  • N 上一个

替换

  • :%s/old-string/new-string/gc (g全局,c询问)
  • 支持正则表达式

(10)其他常用操作

  • gg=G, 格式化代码
  • :set nu,显示行数 (number)
  • :set nonu ,取消显示行数
  • J,将下一行的内容接到当前行的末尾

3. 代码相关操作

3.1 代码缩进折叠

(1)拷贝代码

:set paste进入粘贴模式,这样就会关闭自动缩进。:set nopaste退出粘贴模式。

(2)代码缩进

  • Shift+,代码往前缩进一个TAB
  • Shift+<kbd><<kbd><,代码回缩进一个TAB

将一大段代码回缩一个TAB,按v进入Visual模式,选中要回缩的代码,按Shift+<kbd><<kbd><。

(3)代码折叠

折叠

  • zm,进一步折叠(fold more)
  • zM,折叠所有
  • zc,折叠光标所在的代码(close one fold under the cursor)
  • zC,Close all folds under the cursor recursively

展开折叠

  • zr,reduce folding
  • zR,展开所有折叠(open all folds)
  • zo,展开当前光标所在的折叠(open one fold)
  • zO,Open all folds under the cursor recursively

删除整个折叠的内容

  • zd,删除当前折叠
  • zE,删除所有折叠

在折叠中移动:

  • zj,移动至下一个折叠
  • zk,移动至上一个折叠

3.2 编译与调试

用命令:copen打开Quickfix窗口,再用:wincmd J让Quickfix窗口显示在下方。

:cc      see the current error
:cn      next error
:cp      previous error
:clist   list all errors

用命令:AsyncRun shell command(如:AsyncRun gcc process_synchronization_pv.c)编译文件。

image-20220531095827434

4. 其他插件

4.1 NERD Tree

NERD Tree是树状文件系统管理器。

(1)NERDTree窗口和编辑窗口切换

记住Ctrl+w+w就行了,光标在左右窗口切换。

  • Ctrl+w+w 左右窗口切换
  • Ctrl+h 切换到左侧窗口
  • Ctrl+l 切换到右侧窗口
  • Ctrl+w+r NERDTree窗口移动左侧/右侧切换

(2)打开关闭NERDTree

  • 关闭NERDTree,切换到树状窗口管理器(用Ctrl+w+w,或用Ctrl+hCtrl+l ),按q退出NERDTree
  • 打开NERDTree,:NERDTree

(3)常用操作

  • o,打开文件,并跳转到编辑窗口;展开/折叠文件夹

更多操作,参考:NERDTree 快捷键辑录

4.2 TagList+Cscope

(1)TagList

产生标签。进入到源码目录,运行如下命令:

ctags -R *  # generate tags for all file under current directory recursively

常用操作:

  • 打开/关闭Taglist,:Tlist
  • F5,重新生成tag文件,并更新taglist(:TlistUpdate

  • Ctrl+],跳转到函数定义的位置

  • Ctrl+t,返回

(2)Cscope

生成cscope.out文件,

$ cscope -Rbkq

添加索引文件(已在my_configs.vim添加了),

:cs add file|dir [pre-path] [flags]

" cscope
if filereadable("cscope.out")
    cs add cscope.out
endif

Cscope操作,

find : Query for a pattern            (Usage: find a|c|d|e|f|g|i|s|t name)
       a: Find assignments to this symbol
       c: Find functions calling this function
       d: Find functions called by this function
       e: Find this egrep pattern
       f: Find this file
       g: Find this definition
       i: Find files #including this file
       s: Find this C symbol
       t: Find this text string
本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2023-05-24 11:24

results matching ""

    No results matching ""