Linux —《从零上手Vim:核心用法全解析》

vim

  • 一、vim是什么
  • [二、Vim 三大核心模式(必懂!)](#二、Vim 三大核心模式(必懂!))
    • [1. 命令/普通模式](#1. 命令/普通模式)
      • [1.1 命令模式](#1.1 命令模式)
      • [1.2 命令模式的核心命令](#1.2 命令模式的核心命令)
    • [2. 插入模式](#2. 插入模式)
      • [2.1 插入模式(编辑模式)](#2.1 插入模式(编辑模式))
    • [3. 底行模式](#3. 底行模式)
      • [3.1 底行模式(执行命令)](#3.1 底行模式(执行命令))
      • [3.2 底行模式的核心命令](#3.2 底行模式的核心命令)
  • 三、挑战话题:批量注释与去注释
  • 四、vim的配置问题
  • 五、补充sudoers权限问题

一、vim是什么

  • vim是vi编辑器的增强版
  • Linux/macOS终端默认自带
  • 纯键盘操作,没有鼠标也能高效编辑
  • 核心特点:多模式编辑

二、Vim 三大核心模式(必懂!)

Vim 所有操作都基于 3 种模式,这是它和普通编辑器最大的区别。

使用vim工具:

bash 复制代码
vim 文件 #用来创建文件或打开文件

1. 命令/普通模式

1.1 命令模式

  • 打开vim默认进入的模式,不能直接打字,只能执行命令
  • 从其他模式回到命令模式:无脑Esc
  • 它是vim的控制中枢,光标移动、复制、粘贴、删除、撤销、进入其他模式都需要通过命令模式

1.2 命令模式的核心命令

  1. 复制 / 粘贴 / 删除
    n + yy :复制当前行,带上n表示从当前行连续复制n行
    n + p:粘贴,带上n表示将之前复制的内容粘贴n次
    u :撤销 -- 撤销之前的操作
    Ctrl + r:反撤销
    n + dd :删除指定行 / 或连续n行
  2. 光标移动
  • 行内跳转:
    $:跳到行尾
    ^:跳到行首(非空白字符)
  • 全文跳转:
    gg:跳到文件第一行
    G:跳到文件的最后一行
    nG:跳到第n行
  • 方向移动:
    h 左、j 下、k上、l
    也可以带n,表示向某个方向移动多少个字符
  • 单词移动:
    w:光标按单词向后移动
    b:光标按单词向前移动
  • 大小写切换:~
  1. 删除 / 替换
    n + x:删除光标后的n个字符 (行内)
    n + X:删除光标前的n个字符(行内)
    n + r:替换光标位置的字符,带上n,从当前光标位置开始,同时替换n个字符为某个字符
    R:进入替换模式,直接覆盖文本
  2. 保存并退出
    ZZ:保存并退出,等价于(底行:wq)

2. 插入模式

2.1 插入模式(编辑模式)

  • 打字、写代码的模式
  • 从命令模式进入到插入模式的方法:
    i:在光标前插入
    a:在光标后插入
    o:在当前行下方新开一行插入

3. 底行模式

3.1 底行模式(执行命令)

  • 用来保存、退出、搜索、执行shell命令、分屏等
  • 从命令模式进来:按:
  • 回到命令模式:执行完命令回车,或者按两次Esc

tips:插入模式是无法直接进入底行模式的,必须先Esc回到命令模式,再从命令模式到底行模式

3.2 底行模式的核心命令

底行模式就是按:后输入的命令
w:保存文件
q:退出文件
wq:保存并退出
!:强制(比如:q!强制退出不保存)
set nu /set nonu:打开 / 关闭行号
/关键词:搜索
!命令:不退出vim直接执行shell命令(比如:ls查看当前目录文件)

bash 复制代码
:%s/旧内容/新内容/g			#全文件替换 -- 将所有的旧内容都替换为新内容
:%s/旧内容/新内容/gc			#全文件+确认替换

💡多文件操作

:vs filename:垂直分屏(左右)打开文件
:sp filename:水平分屏(上下)打开文件

多文件来回切换:

  1. 分屏切换:Ctrl + ww(循环切换所有窗口)
  2. 文件来回跳:Ctrl + ^(当前/上一个文件来回切换)
  3. 直接跳转到指定文件::b 文件名

三、挑战话题:批量注释与去注释

这是开发里非常实用的技巧,用块选择模式实现:

批量注释

  1. 首先在命令模式下按Ctrl + v进入可视块模式
  2. h/j/k/l选中要注释的多行开头(垂直选中)
  3. 再按I进入块插入模式
  4. 输入注释符//
  5. 最后按Esc退出,所有选中行就加上注释了

批量去注释

  1. 把光标移动到第一行注释的第一个字符/上
  2. 命令模式下按Ctrl + v进入可视块模式
  3. j向下移动,选中所有要去注释的行(此时选中的是多行的第一列)
  4. 再按2次l向右移动选中两列
  5. d就能一次性删除所有的//

四、vim的配置问题

  1. 原理:vim启动时会自动读取配置文件~/.vimrc,不是只执行二进制程序
    • .vimrc不是默认自带的,Linux安装vim时,不会自动在用户家目录(~)下生成这个文件
    • 没有.vimrc配置文件也能正常使用vim,vim会自动使用默认配置

如果你需要相关配置可以自己创建.vimrc文件并配置,如下图示例:

总结:.vimrc是配置脚本,主要用来定义vim的外观和行为,不存在的时候就是空配置

常见的配置指令

bash 复制代码
" ==============================================================================
" 基础设置(必开)
" ==============================================================================
set nocompatible              " 关闭 vi 兼容模式
set number                    " 显示行号
set relativenumber            " 显示相对行号(方便跳行)
set cursorline                " 高亮当前行
set autoindent                " 自动缩进
set smartindent               " 智能缩进
set showcmd                   " 显示输入的命令
set showmode                  " 显示当前模式
set encoding=utf-8             " 编码 UTF-8

" ==============================================================================
" Tab / 缩进设置(写代码最舒服)
" ==============================================================================
set tabstop=4                 " Tab 显示为 4 个空格
set shiftwidth=4              " 缩进宽度 4
set expandtab                 " Tab 自动转成空格
set softtabstop=4
set shiftround

" ==============================================================================
" 搜索设置
" ==============================================================================
set hlsearch                  " 高亮搜索结果
set incsearch                 " 边输入边搜索
set ignorecase                " 搜索忽略大小写
set smartcase                 " 大写时自动区分大小写

" ==============================================================================
" 界面美观
" ==============================================================================
syntax on                     " 语法高亮
set termguicolors             " 开启真彩色
set background=dark           " 深色背景
set laststatus=2              " 永远显示状态栏
set ruler                     " 显示光标位置
set wrap                      " 自动换行

" ==============================================================================
" 操作体验优化
" ==============================================================================
set mouse=a                   " 开启鼠标支持(点哪跳哪)
set scrolloff=5               " 滚动时上下留 5 行
set history=1000              " 命令历史记录
set updatetime=100            " 响应更快

" ==============================================================================
" 快捷键增强(超级好用)
" ==============================================================================
nnoremap <space> :           " 空格唤出命令行
nnoremap H ^                  " H 跳到行首
nnoremap L $                  " L 跳到行尾

" 分屏快速切换(Alt + hjkl)
nnoremap <A-h> <C-w>h
nnoremap <A-j> <C-w>j
nnoremap <A-k> <C-w>k
nnoremap <A-l> <C-w>l

" 快速切换文件(F2上一个 F3下一个)
nnoremap <F2> :bp<CR>
nnoremap <F3> :bn<CR>

五、补充sudoers权限问题

普通用户zhangsan在使用sudo命令,来进行指令提权时,会提示 "不在sudoers文件中" 解决办法:

  1. 使用root身份编辑sudoers文件:vim /etc/sudoers
  2. 找到这行:root ALL = (ALL:ALL) ALL
  3. 紧挨上一行添加:zhangsan ALL = (ALL:ALL) ALL
  4. 最后保存并退出(tips:该文件有特殊权限,必须用root修改)
相关推荐
平行云2 小时前
虚拟直播混合式2D/3D应用程序实时云渲染推流解决方案
linux·unity·云原生·ue5·图形渲染·实时云渲染·像素流送
我想成为你噶叻叻猪2 小时前
imx6ull板子ping不通ubuntu
linux·运维·ubuntu
桌面运维家2 小时前
校园机房vDisk IDV云桌面Linux更新部署方案
linux·运维·服务器
2601_949194262 小时前
Redis的安装教程(Windows+Linux)【超详细】
linux·数据库·redis
傻啦嘿哟2 小时前
Python 文件批量处理:重命名/备份/同步运维实战指南
linux·数据库·github
cyber_两只龙宝2 小时前
【Oracle】 Oracle之SQL的子查询
linux·运维·数据库·sql·云原生·oracle
司南-70493 小时前
opencode环境搭 并 配置自定义BASE URL
linux·运维·服务器·人工智能
无巧不成书02183 小时前
Rust开发环境完全指南:Windows/Linux双平台配置与实战
linux·windows·rust·gnu·msvc·mingw-w64安装·镜像配置
Little At Air3 小时前
C++stack模拟实现
linux·开发语言·c++·算法