基础开发工具-编辑器vim

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.rhkb.cn/news/489700.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RT-DETR融合[CVPR2024]Starnet中的star block取模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewrite-the-Stars/tree/main 论…

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

每天40分玩转Django:简介和环境搭建

Django简介和环境搭建 一、课程概述 学习项目具体内容预计用时Django概念Django框架介绍、MVC/MTV模式、Django特点60分钟环境搭建Python安装、pip配置、Django安装、IDE选择45分钟创建项目项目结构、基本配置、运行测试75分钟实战练习创建个人博客项目框架60分钟 二、Djang…

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传 What is Upload-File&#xff1f;Upload-File In CTF Web151 考点&#xff1a;前端校验解题&#xff1a; Web152 考点&#xff1a;后端校验要严密解题&#xff1a; Web153 考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154 考点&am…

uniappp配置导航栏自定义按钮(解决首次加载图标失败问题)

1.引入iconfont的图标&#xff0c;只保留这两个文件 2.App.vue引入到全局中 import "./static/fonts/iconfont.css"3.pages.json中配置text为图标对应的unicode {"path": "pages/invite/invite","style": {"h5": {"…

基于Android的生活记录app的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

Photoshop提示错误弹窗dll缺失是什么原因?要怎么解决?

Photoshop提示错误弹窗“DLL缺失”&#xff1a;原因分析与解决方案 在创意设计与图像处理领域&#xff0c;Photoshop无疑是众多专业人士和爱好者的首选工具。然而&#xff0c;在使用Photoshop的过程中&#xff0c;有时会遇到一些令人头疼的问题&#xff0c;比如突然弹出的错误…

软考:工作后再考的性价比分析

引言 在当今的就业市场中&#xff0c;软考&#xff08;软件设计师、系统分析师等资格考试&#xff09;是否值得在校学生花费时间和精力去准备&#xff1f;本文将从多个角度深入分析软考在不同阶段的性价比&#xff0c;帮助大家做出明智的选择。 一、软考的价值与局限性 1.1 …

Ensembl数据库下载参考基因组(常见模式植物)bioinfomatics 工具37

拟南芥参考基因组_拟南芥数据库-CSDN博客 1 Ensembl数据库网址 http://plants.ensembl.org/index.html #官网 如拟南芥等 那么问题来了&#xff0c;基因组fa文件和gff文件在哪里&#xff1f; 2 参考案例 拟南芥基因组fa在这里 注释gff文件在这里

H.323音视频协议

概述 H.323是国际电信联盟&#xff08;ITU&#xff09;的一个标准协议栈&#xff0c;该协议栈是一个有机的整体&#xff0c;根据功能可以将其分为四类协议&#xff0c;也就是说该协议从系统的总体框架&#xff08;H.323&#xff09;、视频编解码&#xff08;H.263&#xff09;、…

mp4影像和m4a音频无损合成视频方法

第一步&#xff1a;复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步&#xff1a;下载-影像.mp4和-音频.m4a 第四步&#xff1a;合并视频&#xff1b; 使用ffmpeg进行无损合成&#xff08;如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…

LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面

FastAPI是WEB UI接口&#xff0c;随着LLM的蓬勃发展&#xff0c;FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD&#xff0c;来创建一个个性化的电子邮件写作助手&#xff0c;以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…

40 list类 模拟实现

目录 一、list类简介 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;list与string和vector的区别 二、list类使用 &#xff08;一&#xff09;构造函数 &#xff08;二&#xff09;迭代器 &#xff08;三&#xff09;list capacity &#xff08;四&#x…

迎接全新的 Kotlin 支持 – K2 模式:基本信息

K2 模式有什么作用&#xff1f; K2 模式是 IntelliJ IDEA 中 Kotlin 支持的新实现&#xff0c;它可以提高 IDE 的稳定性&#xff0c;同时也会为支持未来 Kotlin 语言功能奠定基础。 K2 模式与 Kotlin K2 编译器有什么区别&#xff1f; K2 编译器负责编译 Kotlin 语言 2.0 或…

openGauss开源数据库实战二十四

文章目录 任务二十四 openGaussss WAL管理和归档管理任务目标实施步骤一、WAL管理1.不能修改的WAL参数2.可以修改的WAL参数 二、配置openGauss工作在归档模式1.查看当前的归档设置2.停止openGauss数据库3.创建归档日志的保存目录4.修改启动参数文件5.重新启动openGauss数据库6.…

docker 安装mysql 5.7 详细保姆级教程

1. 安装mysql(5.7) docker pull mysql:5.7 若是拉取不了&#xff0c;可以配置下 docker 源 2. 查看是否安装成功 docker images 下图就是成功了 3.创建mysql专用目录、数据挂载目录、配置文件目录 &#xff0c;演示目录在于/home/下 //命令逐条执行cd /home/ mkdir mysql …

scale index的计算

scale index定义 基本实现 需要注意&#xff0c;scale index的提出者分别构建了MATLAB和R语言的实现方式。 但是&#xff0c;需要注意&#xff0c;经过我向作者求证。 MATLAB编写的代码已经“过时了”&#xff0c;为了拥抱时代&#xff0c;作者构建了R语言包&#xff0c;名称为…

The Rise and Potential of Large Language ModelBased Agents:A Survey---摘要、背景、引言

题目 基于大语言模型的Agent的兴起与发展前景 论文地址&#xff1a;https://arxiv.org/pdf/2309.07864.pdf 项目地址&#xff1a;https:/github.com/WooooDyy./LLM-Agent–Paper-List 摘要 长期以来&#xff0c;人类一直在追求等同于或超越人类水平的人工智能(A)&#xff0c;…

西门子200 smart PLC助力水处理企业自动化改造

摘要 西门子的200SMART PLC&#xff0c;以其强大的功能和灵活的应用性&#xff0c;正成为环保行业中不可或缺的一环。今天&#xff0c;我们就来看看这个小小的PLC是如何在处理环保问题中大显身手的。 不得不说&#xff0c;环保行业的痛点可不少。 比如污水处理&#xff0c;传…