目录

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的使用及配置,有些东西不是很具体,大家可以多做扩展

6.添加用户到白名单

这种用户不可以执行sudo就是因为没有在白名单没有权限

普通用户可以找到这个文件,但是一般不能查看,打开是空白

这是因为没有读取权限,不能让一个用户随意去给自己提权,也不能让普通用户随意去修改。

提权只能有管理用户来决定

我们使用root管理员身份打开

才看的到内容和修改内容

我们找到这一行

然后拷贝root的所有内容,将名字换成我们的普通用户保存即可

就可以执行sudo命令了

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐