Linux

Vim快捷指令总结

一、输入模式(Insert Mode)

进入方式:在普通模式下按 iaoO
退出方式:按 EscCtrl+[ 返回普通模式

1. 基础输入

  • i → 在光标前插入
  • a → 在光标后插入
  • o → 在当前行下方插入新行并进入插入模式
  • O → 在当前行上方插入新行并进入插入模式

2. 插入模式下的快捷操作

  • Ctrl+h → 删除前一个字符(相当于退格键)
  • Ctrl+w → 删除前一个单词
  • Ctrl+u → 删除到行首
  • Ctrl+r [寄存器] → 插入寄存器内容(如 Ctrl+r " 粘贴剪贴板)
  • Ctrl+o → 临时执行普通模式命令(如 Ctrl+o dd 删除当前行后返回插入模式)
  • Ctrl+n / Ctrl+p → 自动补全(向下/向上选择候选词)

二、命令模式(Normal Mode)

默认模式,按 Esc 返回此模式

1. 光标移动

  • 字符级
    h/j/k/l → 左/下/上/右
  • 单词级
    w → 下一个单词开头,b → 上一个单词开头,e → 当前单词末尾
  • 行级
    0 → 行首,^ → 行首非空字符,$ → 行尾
    gg → 文件第一行,G → 文件最后一行,:[n] → 跳转到第 n 行
  • 屏幕级
    Ctrl+f → 向下翻页,Ctrl+b → 向上翻页
    H → 屏幕顶部行,M → 屏幕中间行,L → 屏幕底部行

2. 编辑操作

  • 删除
    x → 删除当前字符,dw → 删除到下一单词开头,dd → 删除整行
    d$D → 删除到行尾,d[n]w → 删除 n 个单词(如 d3w
  • 复制/粘贴
    yy → 复制当前行,y$ → 复制到行尾,p → 粘贴到光标后,P → 粘贴到光标前
  • 撤销与重做
    u → 撤销,Ctrl+r → 重做
  • 缩进
    >> → 向右缩进当前行,<< → 向左缩进

3. 查找与标记

  • /keyword → 向下查找,?keyword → 向上查找
  • n → 下一个匹配项,N → 上一个匹配项
  • * → 查找当前光标下的单词
  • ma → 标记当前位置为标记 a`a → 跳转到标记 a

4. 可视模式(子模式)

  • v → 进入字符可视模式,V → 行可视模式,Ctrl+v → 块可视模式
  • 选中后操作:
    d → 删除,y → 复制,>/< → 缩进,~ → 大小写切换

三、底线命令模式(Command-line Mode)

进入方式:普通模式下按 :

1. 文件操作

  • :w → 保存文件
  • :w [filename] → 另存为新文件
  • :q → 退出,:q! → 强制退出不保存
  • :wq:x → 保存并退出
  • :e [file] → 打开新文件

2. 查找与替换

  • :%s/old/new/g → 全局替换 oldnew
  • :s/old/new/g → 替换当前行所有 old
  • :noh → 取消搜索结果高亮

3. 分屏与窗口

  • :sp [file] → 水平分屏,:vsp [file] → 垂直分屏
  • :close → 关闭当前窗口,:only → 关闭其他窗口

4. 标签页

  • :tabnew [file] → 新建标签页
  • :tabn → 下一个标签页,:tabp → 上一个标签页

5. 配置与调试

  • :set number → 显示行号,:set nonumber → 隐藏行号
  • :syntax on → 启用语法高亮
  • :help [command] → 查看命令帮助(如 :help :s

四、模式切换速记

  1. 输入模式 → 普通模式:Esc
  2. 普通模式 → 底线命令模式::
  3. 普通模式 → 可视模式:v/V/Ctrl+v
  4. 任何模式 → 普通模式:Esc(多次按确保退出)

五、高效组合示例

  1. 删除 3 行并粘贴3ddp
  2. 全局替换并保存:%s/foo/bar/g:w
  3. 分屏编辑:sp ~/.vimrc → 修改后 :wq
  4. 快速注释多行Ctrl+v 选中行 → I#Esc(块插入)

六、配置建议(~/.vimrc)

1
2
3
4
5
6
7
8
set number        " 显示行号  
set cursorline " 高亮当前行
set tabstop=4 " Tab 显示为 4 空格
set expandtab " 将 Tab 转换为空格
set hlsearch " 高亮搜索结果
set incsearch " 实时搜索匹配
set ignorecase " 搜索忽略大小写
set smartcase " 搜索含大写时区分大小写

用户与用户组

一、用户管理

1. 创建用户

  • useradd
    1
    2
    3
    useradd [选项] <用户名>  
    # 示例:
    useradd -m -s /bin/bash john # 创建用户john,自动生成家目录(-m),指定shell为bash(-s)
    常用选项
    • -m:自动创建用户家目录(如 /home/john
    • -s <shell>:指定用户的登录shell(如 /bin/bash
    • -g <主组>:指定用户的主组(默认创建同名组)
    • -G <附加组>:指定用户的附加组(多个组用逗号分隔)

2. 设置用户密码

  • passwd
    1
    2
    passwd <用户名>  # 为指定用户设置密码(root可操作其他用户)  
    passwd # 修改当前用户自己的密码

3. 修改用户属性

  • usermod
    1
    2
    3
    4
    usermod [选项] <用户名>  
    # 示例:
    usermod -l newname oldname # 修改用户名(-l)
    usermod -aG sudo john # 将用户john添加到sudo组(-aG表示追加附加组)
    常用选项
    • -l <新用户名>:修改用户名
    • -d <新家目录>:修改用户家目录路径
    • -aG <附加组>:将用户追加到附加组(不覆盖原有组)

4. 删除用户

  • userdel
    1
    2
    3
    userdel [选项] <用户名>  
    # 示例:
    userdel -r john # 删除用户john,并删除家目录和邮件池(-r)

二、用户组管理

1. 创建用户组

  • groupadd
    1
    2
    3
    groupadd <组名>  
    # 示例:
    groupadd developers # 创建名为developers的组

2. 修改组属性

  • groupmod
    1
    2
    3
    groupmod [选项] <组名>  
    # 示例:
    groupmod -n newgroup oldgroup # 修改组名(-n)

3. 删除用户组

  • groupdel
    1
    2
    3
    groupdel <组名>  
    # 示例:
    groupdel developers # 删除组developers(需确保组内无用户)

4. 管理组成员

  • gpasswd
    1
    2
    3
    4
    gpasswd [选项] <组名>  
    # 示例:
    gpasswd -a john developers # 将用户john添加到developers组(-a)
    gpasswd -d john developers # 将用户john从developers组移除(-d)

三、查看用户与组信息

1. 查看当前用户

  • whoami
    1
    whoami  # 显示当前登录用户名

2. 查看用户信息

  • id

    1
    2
    3
    id <用户名>  # 显示用户UID、GID及所属组  
    # 示例:
    id john # 输出:uid=1001(john) gid=1001(john) groups=1001(john),27(sudo)
  • cat /etc/passwd

    1
    cat /etc/passwd  # 查看所有用户信息(格式:用户名:密码占位符:UID:GID:描述:家目录:shell)

3. 查看组信息

  • getent group

    1
    getent group  # 查看所有组信息(格式:组名:密码占位符:GID:组成员)
  • groups

    1
    2
    3
    groups <用户名>  # 查看用户所属的组  
    # 示例:
    groups john # 输出:john : john sudo

四、文件权限与归属

1. 修改文件所有者

  • chown
    1
    2
    3
    4
    chown [用户]:[组] <文件/目录>  
    # 示例:
    chown john:developers file.txt # 将文件所有者改为john,所属组改为developers
    chown -R john:developers dir/ # 递归修改目录及其子文件(-R)

2. 修改文件所属组

  • chgrp
    1
    2
    3
    chgrp <组名> <文件/目录>  
    # 示例:
    chgrp developers file.txt # 将文件所属组改为developers

3. 修改文件权限

  • chmod
    1
    2
    3
    4
    5
    # 数字模式  
    chmod 755 file.sh # 权限:rwxr-xr-x(所有者=7,组=5,其他=5)

    # 符号模式
    chmod u+x,g-w,o=r file.sh # 所有者添加执行权限,组移除写权限,其他仅保留读权限

五、实用场景示例

  1. 创建用户并加入sudo组

    1
    2
    3
    useradd -m -s /bin/bash john  
    passwd john
    usermod -aG sudo john # 允许john使用sudo提权
  2. 批量删除用户

    1
    2
    3
    userdel -r user1  
    userdel -r user2
    # 或结合脚本操作
  3. 快速查看所有用户列表

    1
    cut -d: -f1 /etc/passwd  # 提取/etc/passwd中的用户名

持续总结中…