2022.11.2

vim配置

使用vim的目的,是为了实现纯键盘编辑。

vim模式

  • normal模式:默认模式

    • 普通模式下,可以进行各种命令操作和移动
    • 大部分情况下,我们是在浏览而不是在编辑,所以vim默认是normal模式
  • insert模式:编辑模式
  • command模式:normal模式下输入:之后执行命令
    • 比如退出保存,:wq
    • 比如全局替换::% s/java/python/g 将全局的java替换成python
  • visual模式:一般用来块状选择文本
    • normal模式下使用v进入visual选择
    • V 整行选中
    • ctrl+v 进行块状选择
    • 块状选中文本后,可以用d删除,y复制,p粘贴

vim基本配置

sjx@Samsung:~$ cat .vimrc
set nu "显示行号
set shiftwidth=4 "设置缩进的空格数为4
set tabstop=4 "设置软制表符宽度为4
set autoindent "设置自动缩进
set cindent "使用C/C++语言的自动缩进方式
set showmatch "光标遇到圆括号、方括号、大括号时,自动高亮对应另一个括号
set ruler "在状态栏显示光标的当前位置(位于哪一行、哪一列)
set statusline=%f\ -\ FileType=%y "设置状态栏
set hlsearch "设置高亮显示搜素字符串
set incsearch "设置增亮搜索,边搜索边高亮
set t_Co=256 "启动256色
syntax on "高亮显示
syntax enable
colorscheme darkblue "设置主题色为darkbluesjx@Samsung:~$

修改colorscheme

最喜欢的主题是darkblue,但是,底下的状态栏,灰色和亮蓝色实在看不清。故作修改。

cd /usr/share/vim/vim81/colors/
sudo cp darkblue.vim darkblueTest.vim
sudo chown -R sjx darkblueTest.vim
vim darkblueTest.vim

将第35行:hi StatusLine guifg=blue guibg=darkgray gui=none ctermfg=blue ctermbg=gray term=none cterm=none
的ctermfg=blue改成 —> ctermfg=56 (紫色)

终端颜色表参考:https://www.ditig.com/256-colors-cheat-sheet

状态栏看不清,error msg也看不清。
第18行,也做修改。
18 hi ErrorMsg guifg=#ffffff guibg=#287eff ctermfg=56 ctermbg=lightblue

vim下载插件

00 安装vim插件管理器

首先,使用vim-plug插件管理器安装vim插件。

https://github.com/junegunn/vim-plug

使用命令:curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

第一个报错:Command ‘curl’ not found, but can be installed with:
解决:sudo apt install curl

第二个报错:sjx@Samsung:~$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:–:-- 0:01:32 --:–:-- 0^C
超时。
解决:使用curl命令需要配置代理:

vim .curlrc
cat ~/.curlrc
proxy = “http://109.123.97.11:8080”
insecure

sync

下载成功:

sjx@Samsung:~$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim% Total    % Received % Xferd  Average Speed   Time    Time     Time  CurrentDload  Upload   Total   Spent    Left  Speed
100 83129  100 83129    0     0   121k      0 --:--:-- --:--:-- --:--:--  121k
sjx@Samsung:~$

01 vim-startify

一个好用的vim开屏插件。

https://github.com/mhinz/vim-startify

  1. vim .vimrc,增加该插件名称
call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify'
call plug#end()
  1. 保存然后source .vimrc
:w
:source ~/.vimrc
  1. 执行:PlugInstall
:PlugInstall

报错:connect to github.com port 443: Connection timed out
解决:

  1. 打开 https://github.com.ipaddress.com/
  2. 复制IP Address
  3. sudo vim /etc/hosts
    在末尾添加:140.82.114.4 github.com
  4. source /etc/hosts
  5. 重新下载,成功
Updated. Elapsed time: 0.015813 sec.
[=]    - Finishing ... Done!
- vim-startify: Already installed

02 nerdtree-vim文件目录和搜索插件

使用nerdtree插件进行文件目录树管理。
解决跳转文件得问题。

https://github.com/preservim/nerdtree

Plug ‘preservim/nerdtree’

  1. :NERDTree命令用于打开目录
  2. vim .vimrc 添加快捷键

vim快捷键

01 进入/退出插入模式

进入

  1. a append after current char
  2. A append after current line
  3. i insert before current char
  4. I insert before current line
  5. o open a line below
  6. O open a line above

退出

  1. :w 保存
  2. :wq 保存并退出
  3. :qa 退出所有窗口

02 快速纠错

痛点:退格键太远,用起来不方便,我们可以抛弃退格键

需要先进入编辑模式或者在命令行中使用:

  1. ctrl+h 删除前一个字符
  2. ctrl+w 删除前一个单词
  3. ctrl+u 删除当前行到光标位置的所有字符

只可以在终端命令行中使用
4. ctrl+a 光标快速移动到开头
5. ctrl+e 光标快速移动到结尾
6. ctrl+b 光标往前移
7. ctrl+f 光标往后移

03 快速切换insert和normal模式

痛点:Esc按起来不方便,不方便切换到normal模式

  • ctrl+c 快速切到normal模式,但有可能会中断某些快捷键
  • ctrl+[ 快速切到normal模式
  • gi 在normal模式下快速跳转到最后一次编辑的地方并进入插入模式

04 vim快速移动大法

左 下 上 右

反人类:hjkl
坚持使用几天,就可以熟练。

在单词之间飞舞

  • w 移动到下一个word开头
  • W 移动到下一个WORD开头
  • e 移动到下一个word尾部
  • E 移动到下一个WORD尾部
  • b 移动到上一个word开头
  • B 移动到上一个WORD开头

小写word指得是以非空白符分割的单词,大小WORD以空白符分割的单词

行间搜索移动

同一行快速移动的方式其实是搜索一个字符并且移动到该字符。

  • f{char} 可以快速移动到该行char字符上,如:fe 快速移动到e字符上(find)
  • t{char} 移动到char的前一个字符上,如:te(until)
  • ; 继续搜该行下一个
  • ,继续搜该行上一个
  • F{char} 反过来搜前面的字符

vim的水平移动

  • 0 快速移动到行首第一个字符
  • ^ 移动到该行第一个非空白字符
  • $ 移动到行尾
  • g_ 移动到行尾非空白字符

记住0 移动到行首,$移动到行尾就可以了。

  • 0w 快速移动到该行第一个非空白字符上

:help ( 可以查询命令的用法

vim页面移动

  • gg 快速移动到文件开头
  • G 快速移动到文件结尾
  • H 快速跳转到屏幕的开头(Head)
  • M 快速跳转到屏幕的中间(Middle)
  • L 快速跳转到屏幕的结尾(Lower)
  • ctrl+u 上翻页(upward)
  • ctrl+f 下翻页(forward)
  • ctrl+e 屏幕上移动一行
  • zz 把屏幕置为中间
  • ctrl+o 快速返回

vim的normal模式提供了强大的命令来移动。

学习vim,让写代码就像弹钢琴,让别人眼睛的速度都跟不上你操作的速度。

05 vim快速增删改查

增加

进入插入模式编辑文本。aio/AIO

删除

normal模式下:

  • x 快速删除一个字符
  • dw 删除一个单词(delete a word)
  • daw 删除一个单词和旁边的空格(delete around word)
  • diw 删除一个单词不删除空格
  • dd 删除当前行
  • dt) 删除括号里的内容(delete to ))
  • dt" 删除到双引号
  • d$ 删除到行尾
  • d0 删除到开头
  • x和d可以搭配数字来执行多次
    • 2dd 删除两行
    • 4x 删除四个字符

vim中 数字+命令 可以用于执行多次命令

可以搭配visual模式行选或块选快速删除。

修改

相比删除,更常用修改。一般是删除之后改成我们希望的文本。

  • r normal模式下使用r可以替换一个字符(replace)

    • ra 把光标所指字符改成a
  • R 直接开始向下替换
  • c 配合文本对象,快速进行修改(change)
    • cw 删除当前单词并进入插入模式
    • ct" 删除到双引号并进入插入模式
  • s 删除当前字符并进入插如模式(substitute)
  • 4s 删除4个字符并进入插如模式
  • S 整行删除,并进入插如模式

查询

  • / 进行前向搜索
  • ? 进行反向搜索
  • n 跳转到下一个匹配
  • N 跳转到上一个匹配
  • * 光标在单词上,使用*号,进行当前单词的前向匹配,找到相同的单词(向下)
  • # 进行当前单词的后向匹配(向上)
  • :noh 搜索结束后,让高亮的字符不再高亮

搜索替换

substitute命令允许我们查找并且替换掉文本,支持正则表达式

  • :[range]s/{pattern}/{string}/[flags]

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

:% s/self/this/g 将全局的self替换成this
:1,6 s/self/this/g 将1-6行的self替换成this
:% s/self//n 查看全文有多少self
:% s/\<quack\>/this/g 使用正则表达式,精确匹配所有quack,而不会有_quack等

延伸:可以使用插件批量搜索替换多个文件中的匹配

06 vim多文件操作

Buffer、Window、Tab

  • Buffer:是指打开的一个文件的内存缓冲区
  • Window:窗口是指Buffer可视化的分割区域
  • Tab:Tab可以组织窗口为一个工作区

Buffer

  • vim打开一个文件后会加载文件内容到缓冲区
  • 之后的修改都会针对内存中的缓冲区,并不会直接保存到文件
  • 直到我们执行:w(write)的时候才会把修改内容写入到文件里

如何在buffer之间切换?

  • :ls 会列举当前缓冲区,然后使用:b n跳转到第n个缓冲区
  • :bp 向前跳(buffer previous)
  • :bnect 向后跳
  • :bfirst 跳到第一个
  • :bl 跳到最后一个(buffer last)
  • :b buffer_name/buffer_number 加上tab补全来跳转,如 :b1 跳到第一个缓冲区
  • :e 文件名 再打开一个缓冲区

窗口

窗口是可视化的分割区域。
一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区

  • ctrl+w s/:sv 水平分割
  • ctrl+w v/:vs 垂直分割(w是window的意思)

每个窗口可以继续被无限分割(看屏幕是否足够大)
可以在不同的窗口用:e 文件名 打开不同的buffer
不同窗口编辑同一个buffer,都会生效,因为编写的都是同一块内存里的内容

  • ctrl+w H 将光标所在位置的窗口移到左边

  • ctrl+w J 将光标所在位置的窗口移到下边

  • ctrl+w K 将光标所在位置的窗口移到上边

  • ctrl+w L 将光标所在位置的窗口移到右边

  • ctrl+w = 使所有窗口等宽、等高

  • ctrl+w _ 最大化活动窗口的高度

  • ctrl+w | 最大化活动窗口的宽度

  • [N]ctrl+w _ 把活动窗口的高度设置为N行,如40ctrl+w _

  • [N]ctrl+w | 把活动窗口的宽度设置为N列

Tab(标签页)

标签页用于将窗口分组。Tab是可以容纳一系列窗口的容器

vim的tab和其他编辑器不太一样,可以想象成Linux的虚拟桌面
比如一个Tab全用来编辑python文件,一个tab全是html文件
相比窗口,tab一般用的比较少,tab太多管理起来也比较麻烦

  • :tabnew 文件名 在新的标签页中打开文件
  • ft 在nerdtree中可以在光标选中的文件目录下新建标签页
  • :tabe[dit] {filename} 在新标签页中打开文件
  • ctrl+w T 把当前窗口移到一个新的标签页中
  • :tabc[lose] 关闭当前标签页及其中的所有窗口
  • :tabo[nly] 只保留活动标签页,关闭所有其他标签页

Tab标签页切换操作如下:

命令模式下:

  • :tabn[ext]{N} 切换到编号为{N}的标签页
  • :tabn[ext] 切换到下一个标签页
  • :tabp[revious] 切换到上一个标签页

normal模式下

  • {N}gt 切换到编号为{N}的标签页
  • gt 切换到下一个标签页
  • gT 切换到上一个标签页
  • ft 新建一个空的tab标签页

标签页一般建立两个就好,太多不好操作

Note: 后面会配合ctrlp插件和nerdtree快速操作多个文件

07 vim的text object

什么是Text Object(文本对象)

vim里文本也有对象的概念,比如一个单词,一段句子,一个段落
很多其他编辑器经常只能操作单个字符来修改文本,比较低效,但vim删除一个单词只要dw
通过操作文本对象来修改要比只操作单个字符高效

如何操作文本对象

  • [number][text object]

    • 数字表示操作几次
    • command表示操作命令,如d(delete),c(change),y(yank)复制
    • text object表示文本对象,如单词w,句子s,段落p

示例1

iw表示inner word。如果键入viw命令,那么首先v将进入选择模式(visual模式),然后iw将选中当前单词。
aw表示around word。它不仅会选中当前单词,还会包含当前单词之后的空格。
以下用[]表示作用范围:

  • iw This is a …[test]… sentence.

  • aw This is a …[test ]sentence.

  • iW This is a […test…] sentence.

  • aW This is a […test… ]sentence.

  • is …sentence. [This is a sentence.] This…

  • as …sentence. [This is a sentence. ]This…

  • ip [This is a paragraph.It has two sentences.]

    The next.
    End of previous paragraph.

  • ap [This is a paragraph.It has two sentences.

    ]The next.
    End of previous paragraph.

练习1

This is a “word”.

  • 删除前面三个单词包括空格:0w3dw(0w先定位到第一个单词起始位置,3dw删除三个单词)
  • 删除前面三个单词不包括空格:0w3diw
  • 删除引号里的word换成hello: fwcw(fw先定位到word的起始位置,然后用cw,删除word并进入插入模式)

示例2

  • i( or i) 1*([ 2 + 3 ]) 不包括括号 用于函数参数定义时
  • a( or a) 1*[( 2 + 3 )] 包括括号
  • i< or i> The <[tag]>
  • a< or a> The []
  • i{ or i} int main(){[return 0]} 可用于选择一个代码段
  • a{ or a} int main()[{return 0}]
  • i[ or i] some [[code block]] 可用写json时
  • a[ or a] some [[code block]]
  • i" The “[best]” 可用于打印log
  • a" The [“best”]
  • iThe[best]` 可用于markdown文档
  • a The [best`]

练习2

_INFO(“this is a test”);

  • 删除双引号里的内容:f"vi"x
  • 更改双引号里的内容:f"ci" (删除并进入插入模式)

map = {
“name” : “j”.
“age” : 13
}

  • 快速修改这个map:ci"

文本对象最常搭配d(delete)、c(change)、v(visual)、y(yank)复制使用

我们需要拜托低效的字符操作,使用文本对象提高效率

08 vim复制粘贴和寄存器的使用

normal模式下的复制粘贴

  • y 复制(yank)
  • d 剪切
  • p 粘贴(put)

我们可以用v命令选中所要复制的地方,然后使用y复制使用p粘贴

此外配合文本对象使用:

  • yiw 复制一个单词
  • yy 复制一行

vim命令模式分屏

分屏

  1. :vs 将当前文件垂直分屏(vertical split)
  2. :vs [file] 创建新文件并垂直分屏
  3. :sv/sp 水平分屏
  4. :sv [file] 创建新文件并水平分屏

分屏间光标移动

  1. ctrl+w h 切换到左边窗口
  2. ctrl+w j 切换到下边窗口
  3. ctrl+w k 切换到上班窗口
  4. ctrl+w l 切换到右边窗口
  5. ctrl+w w 在窗口之间循环切换

分屏移动

  1. ctrl+w H 将当前分屏移到最左边
  2. ctrl+w J 将当前分屏移到最下边,并拓展到整个屏幕宽度
  3. ctrl+w K 将当前分屏移到最上边,并拓展到整个屏幕宽度
  4. ctrl+w L 将当前分屏移到最右边

关闭分屏

  1. ctrl+w c 关闭当前子屏
  2. :hide 关闭当前窗口
  3. :only 只保留当前窗口,关闭其他窗口
  4. :qall 关闭所有窗口
  5. :wall 保存所有修改过得窗口

Vim基本配置快捷键常用命令相关推荐

  1. 安卓程序代写 网上程序代写[原]vim编辑器配置及常用命令

    最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...

  2. Firefox扩展中Keyconfig配置快捷键常用代码

    Firefox扩展中Keyconfig配置快捷键常用代码 下载地址:http://mozilla.dorando.at/keyconfig.xpi //1.关闭左边标签页://代码:var tab = ...

  3. vim+快捷键+常用+命令

    Vim 编辑器是一个基于命令行的工具,是传奇编辑器 vi 的增强版.尽管图形界面的富文本编辑有很多,但是熟悉 Vim 对于每一位 Linux 的使用者都能有所帮助--无论你是经验丰富的系统管理员,还是 ...

  4. vim的模式及常用命令

    vim的模式 正常模式 (Normal-mode) : 左下角显示文件名或为空. 启动vim后默认处于正常模式.不论位于什么模式,按下<Esc>键(有时需要按两下)都会进入正常模式. 插入 ...

  5. 【git 常用配置及常用命令】

    git 常用命令配置 git 常用配置及命令 1.1 git 邮箱配置 1.1.1 git alise 别名配置 1.1.2 git vim 编辑器配置 1.1.3 在本地创建远程分支并切换 1.1. ...

  6. Linux网络配置和常用命令

    安装VmWare注意事项 1.是否启动虚拟化服务: 任务管理器--性能--虚拟化--启动 2.安装之后是否出现虚拟网卡:DOS命令--ipconfig--VM1,VM8 虚拟化服务禁用如何开启 win ...

  7. Linux运维后台进程管理之Supervisor配置和常用命令常见问题案例和管理odoo后台进程

    目录 Supervisor是什么? 安装 配置 实例配置 启动 Supervisor常用命令 常见错误 配置文件出错,没有开放http接口或相关配置有问题 Supervisor未启动,无法运行supe ...

  8. Docker安装及镜像配置(常用命令介绍)

    一.安装Docker 官网 https://docs.docker.com/engine/install/centos/ # 1.卸载旧的版本 yum remove docker \docker-cl ...

  9. Nginx学习2:Nginx的安装配置和常用命令

    Nginx的安装.常用命令和配置文件 在Linux系统安装Nginx 我们使用虚拟机来完成在Linux系统安装Nginx的步骤,在这里我选择的是CentOS7的Linux系统, 1.到官网下载Ngin ...

最新文章

  1. java和内存交互,java内存模型-内存间交互操作
  2. 智慧健康,协同发展:清华大学携手天津市共同探索健康医疗大数据
  3. HTML5和CSS3响应式WEB设计指南译者序
  4. [FLASH_AS]Flash as3 addEventListener事件监听传递参数
  5. Java一致性Hash算法的实现
  6. Python数据类型知识点
  7. WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享
  8. 如何进行linux内核开发,2. 开发流程如何工作 — The Linux Kernel documentation
  9. 国际长途电话区号(中英文名)
  10. 神仙打架!传言阿里 P10 赵海平被 P11 多隆判定 3.25 离职,如何评价阿里 P10 赵海平对王垠的面试?...
  11. latex去心领域符号
  12. HTML+CSS+JS大作业:生态环境网站设计——环境保护主题-绿色环保 (9页) web期末作业设计网页_绿色环保大学生网页设计作业成品
  13. python正则表达式相关知识点记录
  14. 工具传送门(持续更新)
  15. yy账号找回方法详解
  16. SpringBoot实现导出Excel功能
  17. Flutter 圆形(头像)图片的 4种实现
  18. python程序运行结果始终为0_下列 Python 程序的运行结果是( )。 x=0 y=True print(xy and 'A''B')_学小易找答案...
  19. cent os7目录详解
  20. 内大教务系统教学评估

热门文章

  1. 【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色
  2. mysql简单应用题答案_MySQL数据库设计与应用题库免费期末考试2020答案
  3. Android应用不显示图标的终极解决方法!!吐血——
  4. 昨天的明天,也就是今天!
  5. 1020 月饼(C++)
  6. 撞击测试软件,哪些BIM软件有碰撞检测功能?这两款是常客
  7. 为啥SSL证书会过期!
  8. [转贴]世界上最经典的爱情短语
  9. 原来SqlSession只是个甩手掌柜,高级面试题+解析
  10. 每日题(js):setTimeout与setInterval(深入理解)