【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法

目录

1.简单了解vim

2.vim的模式

2.1命令模式

2.2插入模式

2.3底行模式

3.vim各模式下的命令集

3.1正常(命令模式下)

3.1.1光标定位命令

3.1.2 复制粘贴

3.1.3 删除

3.1.4 撤销

3.1.5大小写转换

3.1.6替换

「R」:替换光标所到之处的字符,直到按下「ESC」键为止,这是进入了替换模式,是一个模式(replace)

3.1.7shift=3  高亮查找函数名

3.2 vim插入模式下

3.3vim底行模式下

3.3.2 两个文件对比

vim光标特点:上次退出时光标在那个位置,再次打开光标就在那个位置

3.4 注释模式

4.vim的自主配置

4.1vim的基本配置

4.1.1常用配置

4.1.2 使用插件的方式

4.2自动化配置vim

5.结语


1.简单了解vim

vim本质是linux下的一个编辑器用于写代码,相当于windows中使用文本写代码

vim使用成本比较高,是linux下的一款多模式的编辑器

很早之前使用的是vi,vim更简单,vim是扩展板的vi, 方便进行简单的使用

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

我们在windows下使用的vs等等编辑器,不仅仅可以运行C语言代码,也可以运行python/java甚至html,这种集合编译、调试、发布等等将这个项目的生命周期包括新建项目,写代码、编译代码、调试代码、发布项目功能集中的环境就是集成编译、运行、调试、发布于一体的我们叫做集成开发环境。方便用户统一操作。

linux下也有图形化操作,不过目前接触都是指令级别的操作。一个一个工具都是独立的

写代码 -----使用vim

编译代码使用gcc

调试代码使用gdb

维护结构和自动化编译使用make/makefile

当我们正常使用vim打开一个文件的时候某认是无法写入内容的,vim某认打开的是命令模式,刚打开时我们输入的内容都会被当成命令,有些命令无效就不变现,有些命令是切换命令触发就可以编写来,这也是常说的“新手偶然性”。

  • 进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
  • $ vim test.c
  • 不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文 字。
  • [正常模式]切换至[插入模式]
  • ①输入a
  • ②输入i
  • ③输入o
  • [插入模式]切换至[正常模式]
  • 目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可 以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。
  • [正常模式]切换至[末行模式]
  • 「shift + ;」, 其实就是输入「:」
  • 退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如: :
  • w (保存当前文件)
  •  : wq (输入「wq」,存盘并退出vim)
  • : q! (输入q!,不存盘强制退出vim)

注意:vim异常退出的环,内容会保存在同名的隐藏文件中

2.vim的模式

一共有12种模式:six BASIC modes和six ADDITIONAL modes.

要查看所有模式:打开vim,底行模式直接输入 :help vim-modes

上面我们已经简单接触了一下vim,现在我们就来看看这个多模式编辑器的多模式:

模式转换图

2.1命令模式

Vim某认打开的时候的模式

当我们正常使用vim打开一个文件的时候某认是无法写入内容的,vim某认打开的是命令模式,刚打开时我们输入的内容都会被当成命令,有些命令无效就不变现,有些命令是切换命令触发就可以编写来,这也是常说的“新手偶然性”。

2.2插入模式

正常模式进入插入模式:

  • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;

  • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
  • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
  • 从插入模式切换为命令模式 按「ESC」键

2.3底行模式

  • [正常模式]切换至[末行模式]
  • 「shift + ;」, 其实就是输入「:」
  • 退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如: :
  • w (保存当前文件)
  •  : wq (输入「wq」,存盘并退出vim)
  • : q! (输入q!,不存盘强制退出vim)
  • 从插入模式切换为命令模式 按「ESC」键

注意:vim异常退出的话(网断了,服务器断联等等),vim会对编辑结果进行保存,内容会保存在同名的隐藏文件中,

此时不能直接打开

出现以下选项:

【o】pen read-only  [E]dit anyway  (R)ecover  (D)elete it  (Q) quit (A)bort

选D过后保存退出就可以正常打开了。(把产生异常的临时文件清理掉),有些代码可能会丢失

3.vim各模式下的命令集

3.1正常(命令模式下)

3.1.1光标定位命令

 vim可以直接用键盘上的光标来上下左右移动,老式键盘是没有上下左右方向键的但正规的vim是用

  • 小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格

  • 按「G」:移动到文章的最后
  • 按「 $ 」:移动到光标所在行的“行尾”
  • 按「^」:移动到光标所在行的“行首”
  • 按「w」:光标跳到下个单词的开头
  • 按「e」:光标跳到下个字的字尾
  • 按「b」:光标回到上个单词的开头
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l 按
  • [gg]:进入到文本开始 按
  • [shift+g]:进入文本末端
  • 【按下一个数字 + shiift +g】光标定位到指定的数字行
  • 按「ctrl」+「b」:屏幕往“后”移动一页
  • 按「ctrl」+「f」:屏幕往“前”移动一页
  • 按「ctrl」+「u」:屏幕往“后”移动半页
  • 按「ctrl」+「d」:屏幕往“前”移动半页

3.1.2 复制粘贴

「yy」:复制光标所在行到缓冲区。

数字+yy  :复制光标往下的数字行

「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。

数字+p :实现数字次粘贴,比如5次粘贴

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

3.1.3 删除

「x」:每按一次,删除光标所在位置的一个字符

「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符

「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符

「dd」:删除光标所在行

「#dd」:从光标所在行开始删除#行

dd hou+p相当于剪切功能

3.1.4 撤销

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回恢复。

「ctrl + r」: 撤销的恢复

3.1.5大小写转换

shift按住不动+~,将光标所在一行小写转大写,也可以大写转小写,按一下可以转换一次。

3.1.6替换

「r」:替换光标所在处的字符。

【#r】:[20r]+v,将光标所在位置后20个字符替换为v.

「R」:替换光标所到之处的字符,直到按下「ESC」键为止,这是进入了替换模式,是一个模式(replace)

esc回到命令模式,在替换模式中输入的字符会替换原有内容,但是如果按删除键会回复原来的内容。

3.1.7shift=3  高亮查找函数名

配合n 下一个

3.2 vim插入模式下

这个模式下就是代码编写,没有过多命令讲解

3.3vim底行模式下

shift+;进入底行模式(但是要在正常模式下)

wq: 保存内容并退出

有时保存退出没有权限无法保存退出,也有可能文件处于特殊状态无法保存退出,比如:

文件正在被别人打开,或者文件对应的拥有者不是操作者或者root写一些配置文件时,W!强制写入

q!强制退出

【:!comand】可以直接跟shell命令

q退出

甚至可以做到不退出vim进行代码的编译和运行

  • 列出行号 「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。 跳到文件中的某一行
  • 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。
  • 查找字符 「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。
  • 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
  • 保存文件 「w」: 在冒号输入字母「w」就可以将文件保存起来
  • 离开vim 「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件

3.3.2 两个文件对比

在底层模式下输入vs 文件名,可以打开另外一个文件

绿色的光标在那个位置操作的就是那个文件。

多窗口级别光标移动:ctrl+ww

vim光标特点:上次退出时光标在那个位置,再次打开光标就在那个位置

vim 文件名+行号

进入viM时光标就在指定行

3.4 注释模式

ctrl + v进入 VISUAL BLOCK模式 可进行批量注释

按住上下就可以批量选中

shift +a = a  输入双斜杠//  在按esc就全部注释掉了

ctrl V +上下选择+d  删除注释

4.vim的自主配置

目前使用的还是原生vim,vim打开时会默认读取用户特定的配置文件。

4.1vim的基本配置

进入自己的家目录下查看所有的隐藏文件

配置文件的位置 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~ 打开自己目录下的.vimrc文件,执行 vim .vimrc

4.1.1常用配置

设置语法高亮: syntax on

显示行号: set nu

设置缩进的空格数为4: set shiftwidth=4

也可以使用插件进行配置 都要保证上传到了这个指定目录。

这里整理一份基础配置

" 编辑设置
set nu                      " 显示行号 同 number
set tabstop=4               " 设置制表符宽度为4
set softtabstop=4           " 设置软制表符宽度为4
set shiftwidth=4            " 设置缩进的宽度为4
set expandtab               " 制表符扩展为空格
set showmatch               " 输入括号时,自动高亮对应的另一个括号, 各种括号
set ruler                   " 在状态栏显示光标的当前位置(位于哪一行哪一列)
set autoindent              " 设置自动缩进
set cindent                 " 以C语言的方式缩进
"set cursorline              " 突出显示当前行" 字体和主题
"set guifont=Consolas:h15    " 设置字体和字体大小, 得系统有
"colorscheme neodark         " 设置主题为neodark, 前提得有
" 备份还原设置
"set nobackup                " 取消备份文件
"setlocal noswapfile         " 不创建交换文件.swp, 奔溃用, 正常退出会删除
set undofile                 " 生成un~文件, un~文件用来保存撤销历史
set undodir=~/.vim/undodir   " 统一管理undo文件路径  mkdir ~/.vim/undodir -p
"set backup                   " 开启备份文件 filename~
"set backupext=.bak          " 设置备份文件后缀为.bak" 工具环境设置
set showmode                " 在底部显示,当前处于命令模式还是插入模式
set showcmd                 " 命令模式下,显示当前键入的指令, 包括快捷键
set hlsearch                " 高亮显示搜索的字符串
"set t_Co=256                " 启用256色, 不用主题就关了
set noerrorbells            " 出错时不发出响声
set vb t_vb=                " 光标边界响铃关闭
set laststatus=2            " 显示状态栏
set statusline=%F%m%r%h%w\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%Y\ -\ %H:%M\")}  "状态栏信息模板
set backspace=2
" 语法高亮显示
syntax on
syntax enable
" 文件编码配置
set enc=utf-8               " vim内部编码模式,即内存中的编码 同 encoding
set fenc=utf-8              " 保存文件的默认编码, 不会覆盖原编码
set fencs=ucs-bom,utf-8,cp936,gb18030,gb2312,gbk,big5,euc-jp,euc-kr,shift-jis,latin1   "打开文件时的编码猜测列表,按前后优先级顺序 同fileencodings
set termencoding=utf-8      " 屏幕显示最终编码

4.1.2 使用插件的方式

安装TagList插件,下载taglist_xx.zip ,解压完成,将解压出来的doc的内容放到~/.vim/doc, 将解压出来 的plugin下的内容拷贝到~/.vim/plugin 在~/.vimrc 中添加: let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1 安装文件浏览器和窗口管理器插件: WinManager 下载winmanager.zip,2.X版本以上的 解压winmanager.zip,将解压出来的doc的内容放到~/.vim/doc, 将解压出来的plugin下的内容拷贝到 ~/.vim/plugin 在~/.vimrc 中添加 let g:winManagerWindowLayout=‘FileExplorer|TagList nmap wm :WMToggle 然后重启vim,打开~/XXX.c或~/XXX.cpp, 在normal状态下输入"wm", 你

4.2自动化配置vim

目前只支持 Centos7 x86_64. 

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行):

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

卸载方法:

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

5.结语

以上就是关于vim的使用及配置,有些东西不是很具体,大家可以多做扩展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287517.html

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

相关文章

使用llamafile 构建本地大模型运用

安装 https://github.com/Mozilla-Ocho/llamafile 下载 大模型文件,选择列表中任意一个 wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/resolve/main/llava-v1.5-7b-q4.llamafile?downloadtrue https://github.com/Mozilla-Ocho/llamafile?tabre…

Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版 给选择器加上唯一key(下面的想看就看) 问题复现 需求是用一个下拉切换时间维度的选择,分别为年度、季度、月度,但是开发的时候发现,当切换的时候,视图可正常切换,但点击选择时却发现选…

基于nginx 动态 URL反向代理的实现

背景: 我们在项目中在这样一个场景,用户需要使用固定的软件资源,这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口,资源分类多种类型,每种类型的资源程序和Wapi参数都一样。这些资源部属…

STL —— string(3)

目录 1. 使用 1.1 c_str() 1.2 find() & rfind() 1.3 substr() 1.4 打印网址的协议域名等 1.5 find_first_of() 2. string() 模拟实现 2.1 构造函数的模拟实现 2.2 operator[] 和 iterator 的模拟实现 2.3 push_back() & append() & 的模拟实现 2.4 ins…

sqlite3嵌入式开发板命令行方式使用

如何在编译嵌入式版本的sqlite3,请看我上一篇文章 sqlite3 交叉编译-CSDN博客 一、sqlite3命令行方式使用 假如我将编译好的嵌入式的sqlite3放置在如下路径: 进入bin目录进行操作 1.运行sqlite3 运行sqlite3有两种方式 1)直接在内存里面…

零拷贝技术、常见实现方案、Kafka中的零拷贝技术的使用、Kafka为什么这么快

目录 1. 普通拷贝 2. 数据拷贝基础过程 2.1 仅CPU方式 2.2 CPU&DMA方式 3.普通模式数据交互 4. 零拷贝技术 4.1 出现原因 4.2 解决思路 4.2.1 mmap方式 4.2.2 sendfile方式 4.2.3 sendfileDMA收集 4.2.4 splice方式 5. Kafka中使用到的零拷贝技术 参考链接 本…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置(Intellij IDEA - Settings - Plugins ) 再次创建项目可以看到Android的选项 解决Android导入项目时Gradle下载速度慢/超时/失败

OpenHarmony内核编程实战

在正式开始之前,对于刚接触OpenHarmony的伙伴们,面对大篇幅的源码可能无从下手,不知道怎么去编码写程序,下面用一个简单的例子带伙伴们入门。 ▍任务 编写程序,让开发板在串口调试工具中输出”Hello,Open…

java Web会议信息管理系统 用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 jsp 会议信息管理系统是一套完善的web设计系统,对理解JSP java SERLVET mvc编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0&am…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记11:数字电位器MCP4017

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

一周是一年的2%

今天读到阮一峰的293期周刊,其中有句话很让我震动——“一周是一年的2%”。 过去的时间里,我都没有在意时间的流逝,过的好的时候就觉得一周过的好快,周三一过这周也就过去了,过的不好的时候就感觉很漫长。 确实&…

C# wpf 嵌入hwnd窗口

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口(本章) 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现1、继承HwndHost2、实现抽象方法3、xaml中使用HwndHost控件 二、具体实现1、Win32窗口2、HwndSource窗…

【Python】搭建 Python 环境

目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发,就需要搭建好 Python 的环境 需要安装的环境主要是两个部分: 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…

PHPCMS v9城市分站插件

PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无…

Unity VisionOS开发流程

Unity开发环境 Unity Pro, Unity Enterprise and Unity Industry 国际版 Mac Unity Editor(Apple silicon) visionOS Build Support (experimental) 实验版 Unity 2022.3.11f1 NOTE: 国际版与国服版Pro账通用,需要激活Pro的许可证。官方模板v0.6.2,非Pro版本会打…

安科瑞智慧安全用电综合解决方案

概述 智慧用电管理云平台是智慧城市建设的延伸成果,将电力物联网技术与云平台的大数据分析功能相结合,实现用电信息的可视化管理,可帮助用户实现安全用电,节约用电,可靠用电。平台支持web,app,微…

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针(非函数指针): 有类型的函数指针: void 类型的指针: 结语 前言 进行单元测试之后,但凡…

zookeeper面试题

文章目录 ZooKeeper 是什么?ZooKeeper 提供什么?1. 文件系统2. 通知机制 ZooKeeper 文件系统四种类型的 znode1. PERSISTENT (持久化目录节点)2. PERSISTENT_SEQUENTIAL (持久化顺序编号目录节点)3. EPHEMERAL (临时目录节点)4. EPHEMERAL_SEQUENTIAL (临…

C语言------指针(2)

前面已经向大家介绍了指针的一些基本内容,接下来,就在再我来先大家讲解一下指针的其他内容。 1. 数组名的理解 int arr[10] { 1,2,3,4,5,6,7,8,9,10 }; 在学习数组的过程中,我们肯定会写过以上代码,我们知道 int 是该数组的数…

【C语言】C语言运算符优先级详解

文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…