Linux基础工具|文本编辑器Vim的使用

news2024/10/5 14:23:52

0.前言

您好这里是limou3434的个人博客,感兴趣可以看看我的其他内容。

本次我给您带来的是Linux下Vim文本编辑器的使用,关于vim,您只需要知道一些常用的指令和操作即可,快速上手的秘诀是实践,并且是多次实践。

1.Vim的安装和基础使用

  1. 安装:在centos环境下安装vim可以使用“sudo yum install vim”,其他环境可能不太一样。
  2. 编辑:“vim 文件名”创建文件并且点击“i”进行编辑,若是没有目标文件则创建,有则进入vim的编辑状态。
  3. 退出:“esc+:+wq”这里w是保存,q是退出(加“!”是强制执行),连用就是保存文件并且退出vim。

2.Vim的三种常见模式

Vim是多模式的文本编辑器,其中常见的三种模式是:命令模式、插入模式、底行模式。

2.1.命令模式

vim一进入就是命令模式(默认),按“i”进入插入模式,按“:”进入底行模式。

  1. 复制命令:输入数字“m+yy”可以复制光标所在行后m行的文本,输入“数字n+p”后就可以在光标所处的下一行粘贴n份的内容,另外“vy”命令只复制一个字符。
  2. 剪切命令:“dd”命令可以剪切整行文本,然后使用“p”命令即可,用法类似复制命令,另外“x”命令可以剪切光标所在位置的字符。
  3. 撤销命令:“u”指令是撤销命令,“ctrl+r”是撤销掉撤销命令。
  4. 光标命令:“G”直达文本的最后一个字符,“gg”直达文本的第一个字符,“数字n+G”可以定位到第n行。“$”可以定位到文本行的末尾,“^”可以定位到文本行的开头,“w”和“b”可以以一个单词为单位左右移动。“h、j、k、l”对应方向键(也可以使用方向键,不过更推荐前者,更加原生态)。
  5. 大小写命令:“~”可以自动转化大小写。
  6. 替换命令:“R”命令用作替换文本,接下来输入的内容会把光标所在文本替换/覆盖。(实际上这个是由“命令模式”转化为“替换模式”),“r”命令只替换一个字符(也可以加上数字n,“n+r”再输入单个字符可以连续替换成相同的字符)。
  7. 删除字符:“X”命令和“x”命令,前者删除行后者,删除字符,也可以加上数字n进行批量删除。

2.2…插入模式

进入vim的插入模式就可以编写文本,按“esc”回到命令模式。这个插入模式对于刚入门的人来说没有什么特别的,就是可以通过键盘输入字符的模式而已。

2.3.底行模式

使用“:”起头输入对于的命令,按“esc”回到命令模式。

  1. 保存文件:“:wq”不再进行说明。
  2. 打开行号:“:set nu”指令调出行号,“set nonu”取消行号。
  3. 分屏操作:“:vsplit 文件名”指令为多屏操作,“ctrl+ww”可以快速切换分屏,“ctrl+w+方向键”也可以达到切屏的效果。“:only”取消所有分屏(只保留当前窗口),“ctrl+w+c”取消单个分屏(或者使用“:close”)。另外,“:split”是水平分割屏幕,“:vsplit”是竖直分割屏幕。
  4. 编译代码:“:!gcc 文件名”可以直接在vim内编译代码,然后继续使用vim,同理可以“!./a.out”可以输出编译结果。其中要注意:这里的“!”命令是不退出vim并且执行后续对应的指令,可以用这个命令来运行命令行指令。

3.Vim的相关配置

使用vim的时候最好是配置好配置文件,而vim的配置文件一般所在地为:家目录下的“.vimrc”文件,如果没有可以自己创建。

接下来进行配置,如果之前已经有相关配置了,可以像拷贝一份原有配置,避免配置失败。

Vim配置选项可在Vim命令行模式下使用“:set 某配置选项”激活配置选项,也可以通过“set 某配置选项”的格式保在配置文件中被Vim加载执行。Vim的配置文件 (例如 ~/.vimrc) 其实是多个配置选项的集合。每个Vim配置项都有对应的关闭选项,“set no 某配置选项”即可关闭配置选项。“set nu”表示显示行号,而“set nonu”则表示不显示行号。

知道这一配置思想后,相关的配置项有很多,您可以上网搜一下,配置个性化的vim。下面是我的vim配置,您可以拷贝进您的.vimrc文件中:

"""""""""""""""""""""""""""""""""""
"""=>全局配置<="""
"""""""""""""""""""""""""""""""""""
"关闭vi兼容模式"
set nocompatible

"设置历史记录步数"
set history=1000

"开启相关插件"
"侦测文件类型"
filetype on
"载入文件类型插件"
filetype plugin on
"为特定文件类型载入相关缩进文件"
filetype indent on

"当文件在外部被修改时,自动更新该文件"
set autoread

"激活鼠标的使用"
set mouse=a
set selection=exclusive
set selectmode=mouse,key

"保存全局变量"
set viminfo+=!

"带有如下符号的单词不要被换行分割"
set iskeyword+=_,$,@,%,#,-

"通过使用: commands命令,告诉我们文件的哪一行被改变过"
set report=0

"被分割的窗口间显示空白,便于阅读"
set fillchars=vert:\ ,stl:\ ,stlnc:\

"""""""""""""""""""""""""""""""""
"""=>字体和颜色<="""
"""""""""""""""""""""""""""""""""
"自动开启语法高亮"
syntax enable

"设置字体"
"set guifont=dejaVu\ Sans\ MONO\ 10
set guifont=Courier_New:h10:cANSI

"设置颜色"
"colorscheme desert

"高亮显示当前行"
set cursorline
hi cursorline guibg=#00ff00
hi CursorColumn guibg=#00ff00

"高亮显示普通txt文件(需要txt.vim脚本)"
au BufRead,BufNewFile *  setfiletype txt

"""""""""""""""""""""""""""""""
"""=>代码折叠功能<="""
"""""""""""""""""""""""""""""""
"激活折叠功能"
set foldenable
"set nofen(这个是关闭折叠功能)"

"设置按照语法方式折叠(可简写set fdm=XX)"
"有6种折叠方法:
"manual   手工定义折叠"
"indent   更多的缩进表示更高级别的折叠"
"expr     用表达式来定义折叠"
"syntax   用语法高亮来定义折叠"
"diff     对没有更改的文本进行折叠"
"marker   对文中的标志进行折叠"
set foldmethod=manual
"set fdl=0(这个是不选用任何折叠方法)"

"设置折叠区域的宽度"
"如果不为0,则在屏幕左侧显示一个折叠标识列
"分别用“-”和“+”来表示打开和关闭的折叠
set foldcolumn=0

"设置折叠层数为3"
setlocal foldlevel=3

"设置为自动关闭折叠"
set foldclose=all

"用空格键来代替zo和zc快捷键实现开关折叠"
"zo O-pen a fold (打开折叠)
"zc C-lose a fold (关闭折叠)
"zf F-old creation (创建折叠)
"nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>

"""""""""""""""""""""""""""""""""""
"""=>文字处理<="""
"""""""""""""""""""""""""""""""""""
"使用空格来替换Tab"
set expandtab

"设置所有的Tab和缩进为4个空格"
set tabstop=4

"设定<<和>>命令移动时的宽度为4"
set shiftwidth=4

"使得按退格键时可以一次删除4个空格"
set softtabstop=4
set smarttab

"缩进,自动缩进(继承前一行的缩进)"
"set autoindent 命令打开自动缩进,是下面配置的缩写
"可使用autoindent命令的简写,即“:set ai”和“:set noai”
"还可以使用“:set ai sw=4”在一个命令中打开缩进并设置缩进级别
set ai
set cindent

"智能缩进"
set si

"自动换行”
set wrap

"设置软宽度"
set sw=4

"行内替换"
set gdefault

""""""""""""""""""""""""""""""""""
"""=>Vim 界面<="""
""""""""""""""""""""""""""""""""""
"增强模式中的命令行自动完成操作"
set wildmenu

"显示标尺"
set ruler

"设置命令行的高度"
set cmdheight=1

"显示行数"
set nu

"不要图形按钮"
set go=

"在执行宏命令时,不进行显示重绘;在宏命令执行完成后,一次性重绘,以便提高性能"
set lz

"使回格键(backspace)正常处理indent, eol, start等"
set backspace=eol,start,indent

"允许空格键和光标键跨越行边界"
set whichwrap+=<,>,h,l

"设置魔术"
set magic

"关闭遇到错误时的声音提示"
"关闭错误信息响铃"
set noerrorbells

"关闭使用可视响铃代替呼叫"
set novisualbell

"高亮显示匹配的括号([{和}])"
set showmatch

"匹配括号高亮的时间(单位是十分之一秒)"
set mat=2

"光标移动到buffer的顶部和底部时保持3行距离"
set scrolloff=3

"搜索逐字符高亮"
set hlsearch
set incsearch

"搜索时不区分大小写"
"还可以使用简写(“:set ic”和“:set noic”)"
set ignorecase

"用浅色高亮显示当前行"
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul

"输入的命令显示出来,看的清楚"
set showcmd

""""""""""""""""""""""""""""""""""""
"""=>编码设置<="""
""""""""""""""""""""""""""""""""""""
"设置编码"
set encoding=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936

"设置文件编码"
set fileencodings=utf-8

"设置终端编码"
set termencoding=utf-8

"设置语言编码"
set langmenu=zh_CN.UTF-8
set helplang=cn

"""""""""""""""""""""""""""""
"""=>其他设置<="""
"""""""""""""""""""""""""""""
"开启新行时使用智能自动缩进"
set smartindent
set cin
set showmatch

"在处理未保存或只读文件的时候,弹出确认"
set confirm

"隐藏工具栏"
set guioptions-=T

"隐藏菜单栏"
set guioptions-=m

"置空错误铃声的终端代码"
set vb t_vb=

"显示状态栏(默认值为1,表示无法显示状态栏)"
set laststatus=2

"状态行显示的内容"
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

"粘贴不换行问题的解决方法"
set pastetoggle=<F9>

"设置背景颜色"
set background=dark

"文件类型自动检测,代码智能补全"
set completeopt=longest,preview,menu

"共享剪切板"
set clipboard+=unnamed

"从不备份"
set nobackup
set noswapfile

"自动保存"
set autowrite

"显示中文帮助"
if version >= 603
        set helplang=cn
            set encoding=utf-8
endif

"设置高亮相关项"
highlight Search ctermbg=black ctermfg=white guifg=white guibg=black

""""""""""""""""""""""""""""""""
"""=>在shell脚本开头自动增加解释器以及作者等版权信息<="""
""""""""""""""""""""""""""""""""
"新建.py,.cc,.sh,.java文件,自动插入文件头"
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头"
func SetTitle()
    if expand ("%:e") == 'sh'
        call setline(1, "#!/bin/bash")
        call setline(2, "#Author:bert")
        call setline(3, "#Blog:https://blog.51cto.com/zpf666")
        call setline(4, "#Time:".strftime("%F %T"))
        call setline(5, "#Name:".expand("%"))
        call setline(6, "#Version:V1.0")
        call setline(7, "#Description:This is a production script.")
    endif
endfunc

如果需要安装插件最好还是创建一个文件夹vim,在里面放置更多的配置文件(包括.vimrc),但是不太推荐使用部分比较冗余的插件。

关于vim的配置,也可以使用下面这个一键安装命令(目前只适用Centos7系统):

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

然后输入root密码即可。

在这里插入图片描述

而卸载的命令是:

bash ~/.VimForCpp/uninstall.sh

另外这个配置对应的文档可以查看一下,您可以查看这个项目的原理来配置自己的安装命令。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12 MFC常用控件(一)

文章目录 button 按钮设置默认按钮按下回车后会响应禁用开启禁用设置隐藏设置显示设置图片设置Icon设置光标 Cbutton 类创建按钮创建消息单选按钮多选按钮 编辑框组合框下拉框操作 CListBox插入数据获取当前选中 CListCtrl插入数据设置表头修改删除 button 按钮 设置默认按钮按…

将 YAPF 设置为默认的 Python 代码格式化工具 (VS Code, PyCharm)

yapf 是一个 python 代码格式化工具, 和 black, autopep8, pycharm 自带的格式化功能相同用途. 使用 yapf 作为我的默认格式化工具, 出于以下考虑: 我和团队使用多种 ide, 而 pycharm 自带的格式化功能在其他 ide 上没法用. 所以我需要一个通用的格式化方案来保持代码风格的一…

Unity | HDRP高清渲染管线学习笔记:Rendering Debugger窗口

HDRP给我们提供了一套完整的可视化Debug工具&#xff0c;集成在Rendering Debugger窗口。通过顶部菜单Window→Analysis→Rendering Debugger可以打开窗口。Rendering Debugger窗口不仅仅可以在编辑模式下使用&#xff0c;也可以在真机上运行时使用。&#xff08;要在真机上运行…

数据结构--栈(Stack)的基本概念

数据结构–栈(Stack)的基本概念 线性表是具有相同数据类型的n ( n ≥ 0 n\ge0 n≥0&#xff09;个数据元素的有限序列&#xff0c;其中n为表长&#xff0c;当n 0时线性表是一个空表。若用L命名线性表&#xff0c;则其一般表示为: L ( a 1 , a 2 . . . , a i , a i 1 , . . …

JavaScript 手写代码 第七期(重写数组方法三) 用于遍历的方法

文章目录 1. 为什么要手写代码&#xff1f;2. 手写代码2.1 forEach2.1.1 基本使用2.1.2 手写实现 2.2 map2.2.1 基本使用2.2.2 手写实现 2.3 filter2.3.1 基本使用2.3.2 手写实现 2.4 every2.4.1 基本使用2.4.2 手写实现 2.5 some2.5.1 基本使用2.5.2 手写实现 2.6 reduce2.6.1…

大学实训报告范文6篇

大学实训报告范文篇一&#xff1a;js实训报告 一、简介&#xff1a; Web标准并不是一个单一的标准&#xff0c;而是一个系列的标准的集合。Web标准中具有代表性的几种语言有&#xff1a;_ML可扩展标记语言、_HTML可扩展超文本标记语言、CSS层叠样式表、DOM文档对象模型、Java…

助你丝滑过度到 Vue3 常用的组合式API ②④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

HOT25-环形链表

leetcode原题链接&#xff1a;环形链表 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

数据库分库分表(上)

数据库分库分表 1&#xff0c;概念 分库分表是一种数据库架构设计的方法&#xff0c;用于解决大规模数据存储和查询的性能问题。它将一个大型数据库拆分成多个小型数据库&#xff0c;每个数据库负责存储一部分数据&#xff0c;从而提高数据的读写效率和并发处理能力。 分库分…

MySQL数据库基础 17

第十七章 触发器 1. 触发器概述2. 触发器的创建2.1 创建触发器语法2.2 代码举例 3. 查看、删除触发器3.1 查看触发器3.2 删除触发器 4. 触发器的优缺点4.1 优点4.2 缺点4.3 注意点 在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联的表&a…

虚幻引擎(UE5)-大世界分区WorldPartition教程(三)

文章目录 前言LevelInstance的使用1.ALevelInstance2.选择Actor创建关卡3.运行时加载LevelInstance 总结 上一篇&#xff1a;虚幻引擎(UE5)-大世界分区WorldPartition教程(二) 前言 在制作大关卡时&#xff0c;可能会遇到这样一种情况&#xff0c;就是关卡中的某些Actor会重复…

【每日一题】——Majority

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

A*算法学习笔记

1 算法思路 1、Dijkstra算法与A*算法 &#xff08;1&#xff09;Dijkstra算法&#xff08;贪心策略 优先队列&#xff09;&#xff1a; 集合S&#xff1a;已确定的顶点集合&#xff0c;初始只含源点s。 集合T&#xff1a;尚未确定的顶点集合。 算法反复从集合T中选择当前到…

开闭架构

在《不过时的经典层架构》里&#xff0c;有朋友留言关于Manager和Engine的概念&#xff0c;虽然朋友留言把概念解释清楚了。为了避免其他人有同样的疑问&#xff0c;这里我还是再解释一下。 以上是经典的四层架构&#xff0c;在这个架构中&#xff0c;Manager和Engine(引擎)都是…

【liunx配置服务自启动】liunx系统设置net Core程序开机自启动服务 centos系统

liunx系统设置net Core程序开机自启动服务 系统版本&#xff1a;Centos7.9 我的程序部署到/www/wwwroot/AcmeBookStoreHttpApiHost.com/目录下&#xff0c; 程序名是Meowv.Blog.HttpApi.Hosting.dll 1.新建自启动配置文件 首先跳转到system目录下 cd /usr/lib/systemd/syste…

【.net core】yisha框架,实体不在同一项目下设置swagger接口及实体模型注释,授权鉴权

1.Startup.cs中ConfigureServices方法中添加&#xff1a; 授权鉴权内容 #region 授权鉴权//Bearer 的scheme定义var securityScheme new OpenApiSecurityScheme(){Description "使用JWT方案授权&#xff0c;请求时&#xff0c;在请求头部信息中加入: \"Authoriza…

分布式计算模型详解:MapReduce、数据流、P2P、RPC、Agent

前言 本文隶属于专栏《大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据理论体系 思维导图 MapReduce MapReduce 是一种分布式计算模…

Tomcat与Undertow容器性能对比分析

&#x1f468;‍&#x1f393;作者&#xff1a;bug菌 ✏️博客&#xff1a; CSDN、 掘金、 infoQ、 51CTO等 &#x1f389;简介&#xff1a;CSDN博客专家&#xff0c;C站历届博客之星Top50&#xff0c;掘金/InfoQ/51CTO等社区优质创作者&#xff0c;全网合计8w粉&#xff0c;对…

BufferedImage将图片切成圆形

原图 修改后 方法一 //文件路径 File imageFile new File(path); public BufferedImage changeImages(File imageFile) {BufferedImage avatarImage null;try {avatarImage ImageIO.read(imageFile); avatarImage scaleByPercentage(avatarImage, avatarImage.getWidth(…

LENOVO联想笔记本电脑ThinkBook 15 G2-ITL(20VE)原装出厂Windows10系统恢复原厂OEM设置预装系统

Lenovo联想笔记本电脑&#xff0c;ThinkBook 15 G2-ITL(20VE)出厂Windows10系统&#xff0c;出厂预装系统 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xf…