基础开发工具-编辑器vim

ops/2024/12/15 8:40:00/

vim操作键盘图

下图是比较基础的vim操作键盘图 (IDE例子)

  • vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以运⾏于x window、 mac os、 windows。

vim的基本概念

vim本质是一款多模式的编辑器vim是所有Linux操作系统自带的,是一款使用成本,配置成本比较高的编辑器,在操作上,也就是说虽然前期比较不好上手,但是学熟后,也就没有什么编辑器可以为难到我们了,在配置上还有一款更复杂的:VSCode。

vim的三种模式(其实有好多模式,⽬前掌握这3种即可),分别是命令模式(command mode)、插⼊模式(Insert mode)和底⾏模式(last line mode),各模式的功能区分如下:

  • 正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊Insert mode下,或者到 lastline mode(是一种指令的快捷方式)

  • 插⼊模式(Insert mode)

只有在Insert mode下,才可以做⽂字输⼊,按「ESC」键可回到命令⾏模式。该模式是我们后⾯⽤的最频繁的编辑模式。

  • 末⾏模式(last line mode)

⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。在命令模式下,*shift+:* 即可进⼊该模式。要查看你的所有模式:打开 vim,底⾏模式直接输⼊:help vim-modes

  • 我这⾥⼀共有12种模式:six BASIC modes和six ADDITIONAL modes.
关系转换图

vim的基本操作 

我们刚开始使用vim,一个裸的vim进行代码的编写,他是没有经过任何配置的,最多会给我们带一点点语法提醒;补全,提示,语法报错是完全没有的。

下面我们演示一下:

我们touch一个code.c文件,并代开code.c进行编辑:

lfz@hcss-ecs-ff0f:~/lesson/code$ touch code.c
lfz@hcss-ecs-ff0f:~/lesson/code$ vim code.c

我们刚开始进入vim的时候是命令模式,我们想要进行编辑代码需要切换成插入模式,最简单的切换方法是:输入 i 就可以啦!(简单的切换就是上面那张图示)(想要推出的话切换成底行模式,输入wq:w是保存,q是退出)

我们可以不通过touch一个文件,我们直接vim就能创建一个新的文件,但是如果什么都不写,按q,该文件不会创建,如果什么都不写,wq后,是会创建一个空文件;

我们应该注意的是:我们无法从插入模式直接切换到底行模式 

其实命令模式是很重要的;和在我们使用Ctrl+c/v的操作,这种快捷键一样,本质就是对应vim的命令模式:

就假如当前处于命令模式下,当前光标在第7行(我们可以使用底行模式:set nu/nonu 来设置/取消行号)我们可以:

gg:使光标直接回到第一行(初始位)

Shift+g=G:使光标直接回到第一行

指定行+G:使光标定位到指定行

Shift+4=$:直接定位到结尾

命令模式切换到插入模式

  • i:在当前光标之前插入字符
  • I:在行首插入字符
  • a:在当前光标之后插入字符
  • A:在行末插入字符
  • o:在下一行新建一行并且插入字符
  • O:在上一行新建一行并且插入字符

命令模式下的文本编辑

  • dd:剪切当前行(剪切后不粘贴即为删除)
  • 数字+dd:删除从当前行开始的几行
  • yy:复制当前行
  • 数字+yy:从当前行开始复制几行
  • p:粘贴到光标的下一行
  • D:剪切从光标处到行末的字符
  • d0:剪切从当前光标开始到行首的字符
  • x:删除当前光标所指的字符
  • X:删除当前光标之前的一个字符
  • Shift+~:字母大小写的转换

命令模式下的撤销与导航

  • u:撤销
  • Ctrl+r:反撤销
  • Ctrl+f:向下翻一页
  • Ctrl+b:向上翻一页
  • Ctrl+u:向上翻半屏
  • Ctrl+d:向下翻半屏
  • H:调到屏幕的第一行
  • M:调到屏幕的中央一行
  • L:调到屏幕的最后一行
  • h:向左移动光标
  • j:向下移动光标
  • k:向上移动光标
  • l:向右移动光标
  • G:调到整个代码的最后一行
  • 数字+G:调到整个代码的指定行
  • gg:调到整个代码的第一行
  • w:跳到下一个单词开头
  • b:跳到上一个单词开头

命令模式下的文本选择与缩进

  • v:按照字符来一个一个选择代码片段
  • V:按照行来选择代码片段(以上两个是用来重命令模式转为视图模式的V-BLOCK,返回也是通过Esc)

通过hjkl进行区域的选择,在通过Shift+i=I就转换到了插入模式,再通过Esc返回命令模式,这样可以达到批量化注释的效果。

当让也可在不进入插入模式下,使用命令模式当中的快捷键进行批量化处理:就比如V后进行配量化选择,再对选择的范围输入d,就可以进行删除选中的nei'r

  • <<:将选中的片段整体左移
  • >>:将选中的片段整体右移
  • {:跳到上一个代码段
  • }:跳到下一个代码段

命令模式下的替换与搜索

  • r:替换一个字符
  • R:替换一段字符(其实这是一种模式:替换模式(进入替换模式(REPLACE):Ctrl+r;退回命令模式:Esc))
  • /+搜索内容:搜索指定内容,并且高亮
  • n:往下走一个搜索对象
  • N:往上走一个搜索对象

命令模式下的保存与退出

  • Shift+zz:保存并且退出

底行模式下的替换

  • :%s/123/abc/g:将代码中所有的123替换成abc
  • :数字,数字s/123/abc/g:将数字指定的行之间的123全部替换成abc

底行模式下

  • 执行命令

输入 : 进入底行模式,可以在这里输入单个或多个命令。

  • 保存文件

:w:保存当前文件。

:wq 或 :x:保存文件并退出 Vim。

  • 退出 Vim

:q:退出 Vim,如果文件被修改过,会提示保存。

:q!:强制退出 Vim,不保存修改。

  • 查找替换

:s/old/new/g:将当前行中的“old”替换为“new”,g 表示全局替换。

:%s/old/new/g:将整个文件中的“old”替换为“new”。

:数字,数字s/123/abc/g:将数字指定的行之间的123全部替换成abc

  • 跳转到行

:数字:跳转到指定行号,例如 :10 跳转到第10行。

  • 设置选项

:set nu:显示行号。

:set nonu:关闭行号显示。

  • 执行外部命令

:!命令:在 Vim 内部执行外部命令,例如 :!ls 列出目录内容。

  • 搜索内容

/搜索内容:向下搜索指定内容。

?搜索内容:向上搜索指定内容。

  • 删除行

:数字d:删除指定行号的行,例如 :10d 删除第10行。

  • 复制和移动行

:数字m数字:将指定行移动到另一行号,例如 :10m20 将第10行移动到第20行。

:数字t数字:将指定行复制到另一行号,例如 :10t20 将第10行复制到第20行。

  • 折叠代码

:fold:创建一个折叠。

:foldopen:打开一个折叠。

  • 执行宏

:@寄存器:执行寄存器中的宏,例如 :@a 执行寄存器 a 中的宏。

  • 分屏操作:

:vs 文件名:进行分屏的多模块操作,编辑代码

对于多窗口,光标在哪一个窗口,那么所执行的操作是对应的窗口,那我们怎么进行窗口操作进行光标切换呢?

最简单的做法是:Ctrl+w+w(Ctrl按住别动,w按两下)(在命令模式下)

有了上面的做法,当然就可以进行窗口间的互相编写,命令的交接使用,比如左窗口代码拷贝到右窗口。

使用vim的一个小技巧:

vim 文件 +n:上次光标+n行,打开文件就是到达原来光标位置+n行对应的光标位置;

!关键字:执行最近一次含有该关键字的指令。

vim的配置

在我们的普通用户,也就是自己创建的,使用的账号下,会存在一些隐藏文件,其中有一个文件叫做:.vimrc

lfz@hcss-ecs-ff0f:~$ ls -al
total 60
drwxr-x--- 4 lfz  lfz   4096 Dec 14 19:06 .
drwxr-xr-x 4 root root  4096 Oct  8 23:34 ..
-rw------- 1 lfz  lfz  12418 Dec 13 16:09 .bash_history
-rw-r--r-- 1 lfz  lfz    220 Oct  3 15:14 .bash_logout
-rw-r--r-- 1 lfz  lfz   3771 Oct  3 15:14 .bashrc
-rw------- 1 lfz  lfz     20 Dec 12 19:10 .lesshst
drwxrwxr-x 5 lfz  lfz   4096 Dec 12 19:04 lesson
drwxrwxr-x 3 lfz  lfz   4096 Oct  3 19:54 .local
-rw-r--r-- 1 lfz  lfz    807 Oct  3 15:14 .profile
-rw-r--r-- 1 lfz  lfz      0 Oct  3 15:42 .sudo_as_admin_successful
-rw------- 1 lfz  lfz  12042 Dec 14 19:06 .viminfo

这里我们可以自己touch一个.vimrc文件:

lfz@hcss-ecs-ff0f:~$ touch .vimrc

然后我们通过vim默认打开.vimrc文件:

lfz@hcss-ecs-ff0f:~$ vim .vimrc

接下来我们就可以通过对.vimrc的文件编辑进行对该用户(lfz)的vim工具的配置

我们需要在.vimrc中编辑配置信息,比如配置信息:

set nu

然后我们保存退出后(wq),再打开(vim)文件,就直接显示行号了。

我们通过:

lfz@hcss-ecs-ff0f:~$ which vim
/usr/bin/vim

可以发现,其实vim是我们在/user/bin/vim目录下给我们安装的一款软件,使用vim,就是把该目录进行打开了,该软件在默认情况下,会自动在你当前用户的home目录里搜索配置文件.vimrc,如果没有,vim就使用默认行为,如果有,vim在打开时就会读取.vimrc这个配置文件来进行配置,在.vimrc文件,我们想要注释掉信息的话,使用  " :(如下例子)

  1 "set nu

这样,我们再次通过vim打开文件就不会再直接显示行号了。

还有系统默认,全局公用的vimrc,这是默认存在的,不管在普通用户还是root用户,我们在Ubuntu下,可以打开该文件进行了解:

lfz@hcss-ecs-ff0f:~$ vim /etc/vim/vimrc

我们推荐的是配置自己home目录下的.vimrc就行,由于权限的存在,该配置文件只有我这个用户(lfz)可以使用,这样就不会影响到其他普通用户。 

我们可以在网上找几个配置项,下面是我的配置项,可以参考参考的,如果愿意的话:

我的系统版本是:

lfz@hcss-ecs-ff0f:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
lfz@hcss-ecs-ff0f:~$ cat /etc/issue
Ubuntu 22.04.4 LTS \n \l

配置项:(about:Ubuntu)

在此之前:

Vim-Plug未安装.vimrc 文件中使用了Vim-Plug作为插件管理器,如果您的系统中没有安装Vim-Plug,那么插件将无法安装。您可以通过以下命令安装Vim-Plug:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

手动安装 gruvbox: 如果 Vim-Plug 没有成功安装 gruvbox,你可以尝试手动安装它。使用以下命令克隆 gruvbox 仓库到你的 Vim 插件目录:

git clone https://github.com/morhetz/gruvbox.git ~/.vim/plugged/gruvbox

手动复制颜色文件:如果gruvbox插件已经安装,但是Vim仍然无法找到颜色方案,你可以尝试手动将gruvbox.vim文件复制到~/.vim/colors目录下。

mkdir -p ~/.vim/colors
cp ~/.vim/plugged/gruvbox/colors/gruvbox.vim ~/.vim/colors/

打开.vimrc配置:

" 基本设置
set nocompatible              " 必须
syntax enable                " 启用语法高亮
set background=dark           " 背景色
colorscheme gruvbox          " 颜色方案" 界面设置
set number                    " 显示行号
"set relativenumber            " 显示相对行号
set cursorline                " 高亮当前行
set nowrap                    " 不自动换行
set linebreak                 " 在换行处断行
set autoread                  " 文件在外部被修改后自动重新读取
set mouse=a                   " 启用鼠标支持
set clipboard=unnamedplus     " 允许vim使用系统剪贴板
set expandtab                 " 将制表符展开为空格
set tabstop=4                 " 设置制表符宽度为4
set shiftwidth=4              " 设置缩进宽度为4
set softtabstop=4             " 设置软制表符宽度为4
set list                      " 显示特殊字符
set listchars=tab:▸\ ,eol:¬,trail:⋅,extends:❯,precedes:❮
set wildmenu                  " 增强命令行自动补全
set wildmode=list:longest,full
set scrolloff=3               " 保持三行距离
set sidescrolloff=15          " 侧边滚动距离
set foldmethod=indent         " 代码折叠方式
set foldlevel=1               " 默认折叠级别
set laststatus=2              " 总是显示状态栏
"set statusline=%<%f\ %h%m%r%{fugitive#statusline()}%=%-14.(%l,%c%V%)\ %P" 插件管理
call plug#begin('~/.vim/plugged')Plug 'preservim/nerdtree'         " 文件浏览器Plug 'Xuyuanp/nerdtree-git-plugin' " NERDTree的git插件Plug 'airblade/vim-gitgutter'      " GitGutterPlug 'vim-airline/vim-airline'     " 状态栏增强Plug 'vim-airline/vim-airline-themes'Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }Plug 'junegunn/fzf.vim'Plug 'tpope/vim-fugitive'Plug 'jiangmiao/auto-pairs'Plug 'godlygeek/tabular'Plug 'AndrewRadev/splitjoin.vim'Plug 'tomtom/tcomment_vim'Plug 'sbdchd/neoformat'Plug 'junegunn/vim-easy-align'Plug 'terryma/vim-multiple-cursors'Plug 'tpope/vim-surround'Plug 'preservim/vim-commentary'Plug 'sheerun/vim-polyglot'        " 多语言支持
call plug#end()" 代码格式化工具配置
" 使用neoformat自动格式化代码
autocmd FileType * nnoremap <leader>f :Neoformat<CR>
let g:neoformat_try_formatprg = 1
" 对于C/C++,使用clang-format
autocmd FileType c,cpp nnoremap <leader>f :0,$!clang-format<CR>
" 对于Python,使用autopep8
autocmd FileType python nnoremap <leader>f :0,$!autopep8<CR>" 其他个人设置
" 这里可以添加其他个人化的设置

其实现在对于CentOS是较全的,对于CentOS,我们通过该网站,可以得到较为全面的插件:

(就是在卸载的时候有点卸不干净)

一键部署Vim 从入门到精通. Contribute to wsdjeg/vim-galore-zh_cn development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/wsdjeg/vim-galore-zh_cn

 


http://www.ppmy.cn/ops/142049.html

相关文章

Java web - 后端开发

一 Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用

windows C#-实现具有自动实现属性的轻型类

下面演示如何创建一个不可变的轻型类&#xff0c;该类仅用于封装一组自动实现的属性。 当你必须使用引用类型语义时&#xff0c;请使用此种构造而不是结构。 可通过以下方法来实现不可变的属性&#xff1a; 仅声明 get 访问器&#xff0c;使属性除了能在该类型的构造函数中可…

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录&#xff0c;例如 /opt/opencv-3.2&#xff1a;出错&#xff1a; 使用多线程编译错误1&#xff1a; stdlib.h: 没有那个文件或目录错误2&#xff1a;er…

学习maven(添加依赖坐标,maven的常用命令,依赖传递,解决依赖冲突)

目录 前言 添加依赖坐标 maven 的常用命令 如下图所示&#xff1a;重点是标红的 如何使用这些maven的常用命令呢&#xff1f; 实例 maven常用的命令可以在IDEA中有自带插件来完成 打开IDEA的命令行终端 依赖传递 什么是依赖传递呢&#xff1f; 解决依赖冲突问题 什么…

网络爬虫全解析

一、网络爬虫基础要点 &#xff08;一&#xff09;爬虫原理 目标确定&#xff1a;明确需要抓取数据的网站或网页范围&#xff0c;例如针对特定电商平台抓取商品信息&#xff0c;或聚焦新闻网站获取新闻报道内容&#xff0c;要考量数据的价值与用途。URL 解析&#xff1a;理解网…

CodeFuse「编码挑战季」:冲刺最后1个月!MelGeek磁轴键盘、Beats耳机等你来拿~

本次活动自 1024 程序员节开始&#xff0c;12 月底结束&#xff0c;还有一个月的挑战时间&#xff0c;速来参与&#xff0c;赢取超值奖品&#xff01;&#xff01;&#xff01; 活动介绍 本次 CodeFuse「编码挑战季」活动&#xff0c;需实际完成muAgent、MFTCoder、ModelCache…

SSM虾米音乐项目6--后台专辑模块的修改和删除

删除操作 删除的前端界面 删除的前端代码 <button data-toggle"button" class"btn btn-sm btn-warning" aid"${album.aid}" pic"${album.pic}"> 删除 </button></td> 点击删除按钮&#xff0c;会调用JS中的AJAX请…

【k8s】kubectl get nodes报NotReady

目录 1. 说明2. 问题描述3. kube-flannel.yml 1. 说明 1.这里k8s的版本是v1.17.4。2.若kube-flannel.yml中的镜像拉取不下来&#xff0c;可以下载本文章的文件资源&#xff0c;手动docker load -i ***.tar的方式。3.v1.17.4的kube-flannel.yml参考下面代码。4.通过kubectl get…