# dotfile **Repository Path**: helikeadog/dotfile ## Basic Information - **Project Name**: dotfile - **Description**: 个人配置文件,例如nvim等 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-30 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux环境和软件 ## 1. 选择你的操作系统 ### 1.1 安装VMware - [虚拟机软件](https://www.bilibili.com/video/BV1Jj411S7VT/?spm_id_from=333.337.search-card.all.click&vd_source=002a329d5a6f5498931adabaffce19bc) - 文件链接①:https://pan.quark.cn/s/9a48f519a940
**文件链接②**(比较快):https://www.123pan.com/s/WRbuVv-Jr1Gd.html
文件链接③:https://pan.baidu.com/s/1b1fLqO-VawX4FLK-zxu0RA?pwd=refg 提取码:refg
- 有一点你必须注意 如果你很注重迁移虚拟磁盘的话 就把(将虚拟磁盘改为多文件格式)改为单文件格式 多虚拟磁盘文件说实话是真的占我的磁盘空间( 改成单文件可以随时方便用u盘迁移到别的地方,不容易丢失文件 ### 1.2 下载linux操作系统 - Manjaro - Unbuntu ## 2. 配置操作系统 ### 2.1 Manjaro[配置](https://blog.dejavu.moe/posts/manjaro-note/) ```shell # 测试最新最快的镜像源,选择应用 sudo pacman-mirrors -i -c China -m rank # 更新软件源 sudo pacman -Syyu # 安装基础软件包 sudo pacman -Sy base-devel # 安装AUR助手,建议yay sudo pacman -S yay # 安装处理器微码(Intel处理器) sudo pacman -S intel-ucode # 安装处理器微码(AMD处理器) sudo pacman -S amd-ucode # Vim文本编辑器 sudo pacman -S vim # NTFS格式驱动器读写支持 sudo pacman -S ntfs-3g ``` ### 2.2 Ubuntu 配置 #### 2.2.1 [换源](https://blog.csdn.net/SAKURASANN/article/details/104257996) ```shell # 版本 ubuntu-22.04.2-desktop-amd64 # 1.配置下载源 # 备份原来的文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 修改 sources.list 为以下内容: # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse # deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse # 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse # # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse # 更新 sudo apt update sudo apt upgrade -y ``` #### 2.2.2 [ssh配置](https://blog.csdn.net/weixin_44197719/article/details/119888235) ```shell # 升级apt-get sudo apt-get update # 更新源 sudo apt-get upgrade # 更新已安装包 # 安装ssh服务器、ssh客户端 sudo apt install openssh-server # 安装ssh服务器 sudo apt install openssh-client # 安装ssh客户机 # 配置ssh_config sudo vi /etc/ssh/ssh_config # 去掉PasswordAuthentication yes前面的"#"号 # 配置sshd_config sudo vi /etc/ssh/sshd_config # 在PermitRootLogin prohibit-password这行行首加上"#" # 在此行下面添加新一行 PermitRootLogin yes # 配置root用户密码 sudo passwd # 输入密码,并确认密码 # 查看本机ip 默认情况下,新装的Ubuntu上没有没有ifconfig指令,所以我们要先安装net_tools sudo apt install net_tools # 安装最新版本的net_tools ifconfig -a # inet 就是远程ssh的ip # 关闭防火墙 sudo ufw disable # 重启生效 # 验证:使用ssh远程连接 ssh @ # 本例以root用户,ssh远程连接ip为10.40.20.241 ``` #### 2.2.3 下载vim ```shell # 默认情况下,新装的Ubuntu上也有安装vim,但是这个vim是vim-common版本,操作起来特别不方便,所以要先删除这个版本,然后安装vim vim --version # 查看vim版本 sudo apt-get remove vim-common # 卸载vim-common版本 sudo apt install vim-gtk3 # 下载最新版本的vim ``` #### 2.2.4 配置sudo免密操作 ```shell # 修改sudoers文件权限 chmod 770 /etc/sudoers # 使用vim,修改sudoers配置文件 # step 1 sudo vi /etc/sudoers # step 2 :<密码> # 输入安装Ubuntu系统时设置的密码 # step 3 ··· #%sudo ALL=(ALL:ALL) ALL # 找到这一行,在开头添加"#" %sudo ALL=NOPASSWD: ALL # 添加新的一行 %sudo ALL=NOPASSWD:ALL ··· # step 4 :wq! # 保存配置文件 # step 5 reboot # 重启生效 # 将sudoers文件权限改回最初状态 chmod 440 /etc/sudoers ``` #### 2.2.5 关闭防火墙 ```shell sudo ufw disable # 重启生效 ``` #### 2.2.6 配置命令行自动补全 ```shell apt-get install bash-completion # 下载最新版本的bash-completion sudo -s # 切换到root # source /etc/bash_completion # 重新执行刚修改的初始化文件 ``` #### 2.2.7 设置开机是否显示图形界面 ```shell " 查看当前运行级别 systemctl get-default " 修改当前运行级别 multi-user.target 等价于原运行级别 3(多用户有网,无图形界面) graphical.target 等价于原运行级别 5(多用户有网,有图形界面) systemctl set-default TARGET.target (这里 TARGET 取 multi-user 或者 graphical) ``` #### 2.2.8 配置远程显示(操作) 服务器 GUI 程序(图形化界面) ```shell https://zhuanlan.zhihu.com/p/31012874 ``` ### 2.3 通用软件安装 #### 1. [Neofetch:在终端中显示 Linux 系统信息](https://zhuanlan.zhihu.com/p/69777438) > Neofetch 是一个简单但有用的命令行系统信息工具,它用 Bash 编写。它会收集有关系统软硬件的信息,并在终端中显示结果。 > -- Sk(作者) ```shell # 安装 Neofetch # 在 Arch Linux 及其衍生版上,使用这个命令安装它: sudo pacman -S netofetch # 在 Debian(Stretch / Sid)上: sudo apt-get install neofetch # 在 Fedora 27 上: sudo dnf install neofetch # 在 RHEL、CentOS 上: yum install epel-relase # 获取 neofetch 仓库: curl -o /etc/yum.repos.d/konimex-neofetch-epel-7.repo https://copr.fedorainfracloud.org/coprs/konimex/neofetch/repo/epel-7/konimex-neofetch-epel-7.repo # 然后,安装 Neofetch: yum install neofetch # 在 Ubuntu 17.10 和更新版本上: sudo apt-get install neofetch ``` #### 2. git ```shell " 安装git sudo apt install git " 安装lazygit LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" tar xf lazygit.tar.gz lazygit sudo install lazygit /usr/local/bin " 验证lazygit是否安装成功 lazygit --version ``` #### 3. fish ```shell # https://fishshell.com/ # https://www.ruanyifeng.com/blog/2017/05/fish_shell.html sudo apt-get install fish # fish 命令不兼容bash # 配置oh-my-fish https://zhuanlan.zhihu.com/p/35448750 curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish ``` #### 4. Anaconda ```shell # 1. 官网下载Anaconda wget https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh # 如果没有wget,执行 apt-get install -y wget # 2. 安装 chmod +x Anaconda3-2023.07-1-Linux-x86_64.sh ./Anaconda3-2023.07-1-Linux-x86_64.sh # 3. 在bash下执行命令 conda init fish 然后重新打开窗口 ``` #### 5. Tmux ```shell # 教程https://www.ruanyifeng.com/blog/2019/10/tmux.html # 1. 安装 sudo apt install tmux # 2. 进入tmux tmux # 3. 按下Ctrl+d或者显式输入exit命令,就可以退出 Tmux 窗口。 # 看历史输出日志的命令是ctl + b + [ # 最简洁流程 1. 新建会话tmux new -s my_session。 2. 在 Tmux 窗口运行所需的程序。 3. 按下快捷键Ctrl+b d将会话分离。 4. 下次使用时,重新连接到会话tmux attach-session -t my_session。 # 会话操作 Ctrl+b d:分离当前会话。 Ctrl+b s:列出所有会话。 Ctrl+b $:重命名当前会话。 # 窗格操作 Ctrl+b %:划分左右两个窗格。 Ctrl+b ":划分上下两个窗格。 Ctrl+b :光标切换到其他窗格。是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。 Ctrl+b ;:光标切换到上一个窗格。 Ctrl+b o:光标切换到下一个窗格。 Ctrl+b {:当前窗格与上一个窗格交换位置。 Ctrl+b }:当前窗格与下一个窗格交换位置。 Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。 Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。 Ctrl+b x:关闭当前窗格。 Ctrl+b !:将当前窗格拆分为一个独立窗口。 Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。 Ctrl+b Ctrl+:按箭头方向调整窗格大小。 Ctrl+b q:显示窗格编号。 # 窗口操作 Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。 Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。 Ctrl+b n:切换到下一个窗口。 Ctrl+b :切换到指定编号的窗口,其中的是状态栏上的窗口编号。 Ctrl+b w:从列表中选择窗口。 Ctrl+b ,:窗口重命名。 ``` #### 6. ranger ```shell # Linux 终端资源管理器 https://github.com/ranger/ranger https://linux.cn/article-14835-1.html # 1. 安装 sudo apt install ranger # 2. 配置 https://www.bilibili.com/video/av64990176/?vd_source=002a329d5a6f5498931adabaffce19bc # https://zhuanlan.zhihu.com/p/476289339 ranger --copy-config=all vim ~/.config/ranger/rc.conf 显示边框set draw_borders both 显示序号set line_numbers true 序号从1开始set one_indexed true # 3. 快捷键 https://www.dazhuanlan.com/awhile/topics/1617886 # 修改打开文件的默认程序 Select an editor. To change later, run 'select-editor'. ``` ## 3. 常用命令 ### 3.1 服务类 ```shell systemctl start nfs-server.service . # 启动nfs服务 systemctl enable nfs-server.service # 设置开机自启动 systemctl disable nfs-server.service # 停止开机自启动 systemctl status nfs-server.service # 查看服务当前状态 systemctl restart nfs-server.service # 重新启动某服务 systemctl list-units --type=service # 查看所有已启动的服务 sudo systemctl list-unit-files # 查看开机启动状态 启动状态 含义 inactive 服务关闭 disable 服务开机不启动 enabled 服务开机启动 static 服务开机启动项被管理 failed 服务配置错误 ``` ### 3.2 解压缩类 ```shell # unzip https://zhuanlan.zhihu.com/p/87128636 # 解压到文件夹下 unzip zipped_file.zip -d unzipped_directory ``` # [VIM教程](https://www.imooc.com/video/19480) ## 1.安装 ```shell # 默认情况下,新装的Ubuntu上也有安装vim,但是这个vim是vim-common版本,操作起来特别不方便,所以要先删除这个版本,然后安装vim vim --version # 查看vim版本 sudo apt-get remove vim vim-runtime vim-tiny vim-common vim-scripts vim-doc # 彻底卸载 vim sudo apt-get install vim # 重新安装 vim 这个版本不支持系统剪切板 源码安装 git clone https://github.com/vim/vim.git cd vim/src make vim --version | grep clipboard 有+号的表示支持,-号表示不支持。 最好安装 sudo apt-get update sudo apt install vim-gtk3 ``` ## 2. [初识VIM](https://www.imooc.com/video/19446) ### 2.1 进入插入模式 ```shell # 进入插入模式 a:当前字符的后一个位置插入 i:当前字符的前一个位置插入 o:当前编辑位置下面新起一行 A:在行最后位置插入 I: 在行最前的位置插入 O:在当前编辑位置的上面新起一行 w:保存 wq:保存并退出(w and q) ``` ### 2.2 vim四种模式 ```shell vim4种模式 Normal普通模式(浏览) Esc插入模式回到普通模式 普通模式下进行各种命令操作和移动 大部分情况下,使用的是浏览 Insert插入模式(编辑) a/i/o 光标进入插入模式 A/I/O 行进入插入模式 Command命令模式(操作) Normal模式下:进入命令模式 :q退出 :w保存 :vs(vertical split)垂直左右分屏 :sp(split) 水平上下分屏 :set nu 设置行号 :% s/java/python/g 全部替换java->python Visual可视模式(选择) Nomal模式下进入Visual模式 v选择字符 V选择行 ctrl+v块状选择 ``` ### 2.3 vim插入模式小技巧 ```shell 1. 输入模式下快速纠错(终端下也有类似的快捷键) ctrl+h 删除上一个字符 ctrl+w 删除上一个单词 ctrl+u 删除当前行 ctrl+a (终端)快速移动到开头 ctrl+e (终端)快速移动到结尾 ctrl+f (终端)光标后移 ctrl+b (终端)光标迁移 2. 快速切换 insert 和 normal 模式 insert -> normal: ctrl+c(不推荐,会中断某些插件) 或者 ctrl+[ gi: normal 模式切换到 insert 模式,且到上次编辑的地方 ``` ### 2.4 vim快速移动大法 ```shell 语法高亮::syntax on normal 移动的快捷方式: h 左移 j 下移 k 上移 l 右移 w/W 移到下一个word/WORD开头, e/E下一个word/WORD尾 b/B 回到上一个word/WORD开头,可以理解为backword word指的是以非空白符分割的单词,WORD以空白符分割的单词 行间搜索移动 f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符 F{char}: 当前光标往前搜索字符 t移动到char的前一个字符 0: 移动到行首第一个字符 ^: 移动到第一个非空白字符 $: 移动到行尾 g_: 移动到行尾非空白字符 页面移动 gg: 文件开头 G: 文件结尾 ctrl+o 快速返回上次编辑位置 H: 屏幕的开头(Head) M: 屏幕的中间(Middle) L: 屏幕的结尾(Lower) crtl+u: 上翻页(upword) ctrl+f: 下翻页(forword) zz: 屏幕置为中间 ``` ### 2.5 vim快速增删改查 ```shell 数字+命令可多次执行该命令 2dd 删除两行 4x 删除4个字符 删除: x 删除一个字符 使用d(delete)配合文本对象快速删除一个单词 daw(d a word,包括空白字符) diw(删出一个word,不包括空白字符) d$ 快速删除到行尾 d0 快速删除到行首 ... dd 删除当前行 dt[char] 删除直到[char]的字符 使用v可以选择删除 :g/^$/d 删除不包含任何空格的空行; :g/^\s*$/d 删除包含空格的空行; 修改: 常用有三个,r(replace),c(change),s(substitute) r 替换当前字符 R 进入替换模式 s 删除当前字符并进入插入模式 S 删除当前行并进入插入模式 c[object] 删除一个[object]并进入插入模式 ct[char] 删除直到[char]的字符并进入插入模式 C 删除当前行光标后所有字符并进入插入模式 查询: :set hls 搜索结果高亮 :set incsearch 增量搜索 /[string] 正向搜索 ?[string] 反向搜索 其中: n/N 下一个/上一个匹配 */# 当前单词的正向/反向匹配 ``` ### 2.6 vim搜索替换 ```shell # vim如何搜索替换 # vim替换命令 substitute命令允许我们查找并且替换掉文本,并且支持正则表达式 - :[range]s[ubstiute]/{pattern}/{string}/[flags]` - range表示范围比如:10,20表示10-20行,%表示全部 - pattern要替换的模式,string是替换后的文本 # 替换标志位 flags有几个常用的标志 - g(global)表示全局范围内执行 - c(confirm)表示确认,可以确认或者拒绝 - n(number)报告匹配到的次数而不替换,可以用来查询匹配次数 # 例如: :s/p1/p2/g 将当前行中全替换p1为p2 :%s/p1/p2/g 将当前文件中全替换p1为p2 :%s/p1/p2/gc 将当前文件中全替换p1为p2,并且每处询问你是否替换 :10,20s/p1/p2/g 将第10到20行中所有p1替换为p2 :%s/1\\2\/3/123/g 将“1\2/3” 替换为 “123”(特殊字符使用反斜杠标注) :%s/\r//g 删除 DOS 换行符 ^M :%s/\\jiao/g精确匹配某个单词 # 大部分批量操作都可以用正则来完成,比如行尾加分号 :%s/$/;/g ``` ### 2.7 vim多文件操作 ```shell vim file1 file2 -O 分窗口打开文件名所涉及的文件 # 概念: Buffer: 内存缓冲区 Window: Buffer的可视化分割区域 Tab: 组织Window为一个工作区 补全命令 :ls 列举当前缓冲区 :b [num] 跳转到[num]缓冲区 :b [name] 跳转到[name]缓冲区 :bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区 :e [name] 打开[name]文件 C-w s 水平分割窗口 C-w v 垂直分割窗口 C-w w 循环切换窗口 C-w h/j/k/l 切换到←/↓/↑/→窗口 C-w H/J/K/L 移动当前窗口向←/↓/↑/→ C-w = 所有窗口等宽高 C-w _/| 当前窗口最大化高度/宽度 [num]C-w _/| 当前窗口高度设为[num]行/列 :tabnew 新建标签页 :tabe [name] 在新标签页打开[name]文件 :tabc 关闭当前标签页和窗口 :tabo 只保留当前标签页并关闭其他的 C-w T 将当前窗口移动到新标签页 :tabn [num] 切换到[num]标签页,没有[num]表示下一个 [num]gt 同上 :tabp 切换到上一个标签页 gT 同上 ``` ### 2.8 vim的text object ```shell # 文本对象text object 命令格式: [number][text object] number 次数 command 命令 d(delete), c(change), y(yank), v(visual) text object 文本对象 w(单词word), s(句子sentence),p(段落paragraph) eg: iw 整个WORD(不包括分隔符) viw 选择模式整个WORD(不包括分隔符) vaw a word 选中当前单词和单词之后的空格 vis/vas/vip/vap 句子、段落 $ 到行末 0 到行首 ^ 到行首非空字符 tx 光标位置到字符 x 之前 fx 光标位置到字符 x 之处 iw 整个单词(不包括分隔符) aw 整个单词(包括分隔符) iW 整个 WORD(不包括分隔符) aW 整个 WORD(包括分隔符) is 整个句子(不包括分隔符) ib 小括号内 ab 小括号内(包含小括号本身) iB 大括号内 aB 大括号内(包含大括号本身) i) 小括号内 a) 小括号内(包含小括号本身) i] 中括号内 a] 中括号内(包含中括号本身) i} 大括号内 a} 大括号内(包含大括号本身) i' 单引号内 a' 单引号内(包含单引号本身) i" 双引号内 a" 双引号内(包含双引号本身) 2i) 往外两层小括号内 2a) 往外两层小括号内(包含小括号本身) 2f) 到第二个小括号处 2t) 到第二个小括号前 ciw 删除单词并插入 ci{ 删除{内容 插件 vim-go 可以将f代表一个函数 ``` ### 2.9 vim的复制粘贴与寄存器的使用 ```shell # https://zhuanlan.zhihu.com/p/73984381 :help registers # vim在Normal模式复制粘贴 - Normal模式下复制粘贴分别使用y(yank)和p(put),剪切d和p - 可以使用v(visual)命令选中所要复制的地方,然后顺遂p粘贴 - 配合文本对象:比如顺遂yiw复制一个单词,yy复制一行 # Insert模式下的复制粘贴 - 和其他文本编辑器差不多,但粘贴代码有个坑 - 在vimrc中设置了autoindent,粘贴Python代码缩进错乱 - 这个时候需要使用`:set paste`和`:setnopaste`解决 # 什么是vim的寄存器 - vim里操作的是寄存器而不是系统剪切版,这和其他编辑器不同 - 默认使用d删除或者y复制的内容都放到了“无名寄存器” - 用x删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符 # 深入寄存器(register) - 通过`"{register}`前缀可以指定寄存器,不指定默认无名寄存器 - 比如使用`"ayiw`复制一个单词到寄存器a中,'bdd删除当前行到寄存器b中 - :reg a查看寄存器a中的内容 - "a p粘贴a寄存器中的内容 # 其他常见寄存器 除了有名的寄存器a-z,vim中还有一些其他常见寄存器 - 复制专用寄存器`"0`使用y复制的文本同时会被考呗到复制寄存器0(无名寄存器也会复制) - 系统剪切版`"+`可以复制到系统剪切版 - 其他寄存器,比如`"%`当前文件名,`".`上次插入的文本 - 输入:echo has('clipboard') 如果为1,证明支持这个特性 - :set clipboard=unnamed可以让你直接复制粘贴系统剪切版内容 ``` ### 2.10 vim强大的宏macro ```shell # 从需求说起 批量处理文本 # 什么是vim宏(macro) - 宏可以看成是一系列命令的集合 - 我们可以使用宏【录制】一系列操作,然后用于回放 - 宏可以方便的把一下列命令用在多行文本上 # 如何使用宏 - vim使用q来录制,同时也也是q结束录制 - 使用q{register}选择要保存的寄存器,把录制的命令保存其中 - 使用@{register}回放寄存器中保存的一系列命令 # 用宏解决刚才的问题 - 先给一行加上双引号,让后在回放到其他行 - 我们先使用q开始录制,给一行加上双引号,之后使用q退出 - 在剩下的所有行中回放录制的宏 # 批量操作 - shift+v 选择一行,使用G全选剩下的,然后在命令行模式下:normal 就是使用normal模式下的命令, :normal @a 就可以将剩下的全部执行记录下的宏。 # 不使用宏 shift+v 选择一行,使用G全选剩下的 然后在命令行模式下:normal I“ :normal A“ # 避免vim映射 normal命令中的可选参数 ! 用于指示vim在当前命令中不使用任何vim映射;如果没有显式使用 ! 选项,即便是执行一个非递归映射 (noremap) 命令,它的参数仍有可能被重新映射。 :normal! G # 当然如果不适用 Visual block 那也可以指定具体的操作对象, 比如::%normal I#,% 代表这个文件,代表着注释整个文件,当然也可以选择具体的范围,如::1,4normal I# 表示注释 1 到 4 行。 ``` ### 2.11 vim补全大法 ```shell # 补全单词: ctrl + n ctrl + p # 补全文件名 ctrl+x ctrl+f # 检测文件类型 filetype on ctrl+x ctrl+o 补全代码,需要开启文件类型检查,安装插件 # 在光标处插入文件名 :r! echo % # 在光标处插入文件的绝对路径 :r! echo %:p ``` ### 2.12 vim换个配色 ```shell :colorscheme 显示当前主题配色 :colorscheme 显示所有配色 :colorscheme 配色名 修改配色 # 从网上下载主题 https://github.com/flazz/vim-colorschemes 如果在本地没有满意的配色,可以到GitHub找vim各种配色 - [vim-hybrid](https://github.com/w0ng/vim-hybrid "vim-hybrid")这个主题也不错。 - 下载到本地,解压。 - 将 `hybrid.vim` 文件移动到 `~/.vim/colors`(如果没有这个目录的话,使用`mkdir ~/.vim/colors -p`先创建。) - 回到第一步,进行切换主题 - 可以下载多个配色到 `~/.vim/colors`即可随时更换 - 如果需要持久化配置,则需要写的 `vimrc` 中 ``` ### 2.13 裸的vim也很强 ```shell - 很多初学者Vim基本命令都不熟就开始找一些复杂的强大配置 - 不利于你熟悉Vim,一旦出问题了你还不知道怎么修复 - 建议初学者还是从裸的Vim开始学习,有些场景比如服务器或者容器上我们没法配置Vim 学之前,先用对打字指法和盲打 - 编辑代码,脑子- -般比手快,盲打有利于跟上你的大脑速度 - 裸的Vim也有很多强大功能和使用方式,本章你应该学到了不少 - 学会了用Vim ,你可以在你的IDE.上安装Vim插件,几乎所有流行的编辑器和IDE工具都支持Vim插件 ``` ### 2.14我的代码操作(包括在vscode里) ```shell # 整体缩进 shift+v 再按< # 对其第一行缩进 shift+v 再按= # 删除最后一行的逗号 shift+v :normal $d # 批量在行尾加上逗号 ctrl+v进入列可视模式,然后上下移动光标选中所要操作的行; 按$光标跳到行末,再按A(shift+a)进入编辑模式; 输入你要输入的内容(你这个问题中要加的是逗号); 然后按ESC退出编辑模式,此时所有你选中的行都会加上逗号了。 ``` ## 3. 编写我的vim配置 #### 3.1 我的vim我做主,编写vim配置 :h option-list 查看选项列表 :source ~/.vimrc 修改后生效 研究一下vim-go-tutorial的vimrc文件 https://github.com/fatih/vim-go-tutorial/blob/master/vimrc ```shell " 常用设置 " 设置相对行号 set relativenumber " 设置背景为黑暗 set bg=dark " 系统剪切板互通 set clipboard=unnamed " 按F2进入粘贴模式 set pastetoggle= " 高亮搜索 set hlsearch " 增量搜索 set incsearch " 设置折叠方式 set foldmethod=indent " 一些方便的映射 let mapleader= ',' let g:mapleader=',' " 使用jj进入normal模式 inoremap jj `^ "使用leader+w 直接保存 inoremap w :w noremap w :w " 切换buffer nnoremap [b :bprevious nnoremap ]b :bnext nnoremap [B :bfirst nnoremap ]B :blast " use ctrl+h/j/k/L switch window noremap h noremap j noremap k noremap l " nerdtree settings nnoremap f :NERDTreeFind nnoremap t :NERDTreeToggle " set width let NERDTreeWinSize=31 " show hidden files let NERDTreeShowHidden=1 " not show files listed let NERDTreeIgnore= [ \ '\.git$', '\.hg$', '\.svn$', '\.stversions$', '\.pyc$', '\.pyo$', '\.swp$', \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$', \ ] " ctrlp设置 let g:ctrlp_map = '' let g:ctrlp_cmd = 'CtrlP' " easy-motion设置 nmap s (easymotion-s2) nmap t (easymotion-t2) " tagbar映射 nmap :TagbarToggle " deoplete配置 let g:deoplete#enable_at_startup = 1 set completeopt-=preview "Sudo to write cnoremap w!! w !sudo tee % >/dev/null " json格式化 com! FormatJSON %!python3 -m json.tool " 插件设置,这里使用了vim-plug call plug#begin('~/.vim/plugged') "安装插件只需要把github 地址放到这里重启后执行:PlugInstall 就好了 " 状态栏 Plug 'vim-airline/vim-airline' " 缩进线 Plug 'yggdroot/indentline' " 开屏插件 Plug 'mhinz/vim-startify' " 主题 需要再最后加上 autocmd vimenter * ++nested colorscheme gruvbox Plug 'morhetz/gruvbox' " vim文件目录插件 Plug 'scrooloose/nerdtree' " vim文件搜索插件 Plug 'kien/ctrlp.vim' " vim快速定位插件 Plug 'easymotion/vim-easymotion' " vim编辑括号插件 Plug 'tpope/vim-surround' " 模糊搜索fzf.vim Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' " 替换插件far.vim Plug 'brooth/far.vim' " 安装python-mode Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' } " tagbar 代码大纲 想要支持多语言需要安装ctags Plug 'majutsushi/tagbar' " vim-interestingwords 高亮单词 Plug 'lfv89/vim-interestingwords' " vim补全插件 deoplete.nvim 需要pip3 install pynvim if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } else Plug 'Shougo/deoplete.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' endif " 格式化插件neoformat 如:python需要安装pip install autopep8 Plug 'sbdchd/neoformat' " 静态检查 ALE (Asynchronous Lint Engine) 需要安装pip install pylint如果想忽视某些错误,查看官方文档或者在项目里配置pylint文件 Plug 'w0rp/ale' " 格式化代码 gcc 注释代码 gcgc 去掉注释 Plug 'tpope/vim-commentary' call plug#end() autocmd vimenter * ++nested colorscheme gruvbox ``` #### 3.2 vim映射迷人眼 ```shell " 基本映射 基本映射指的是normali模式下的映射,当然还有其他模式的映射 命令模式下: 用map就可以实现映射。比如 :map - x 然后按-就会删除字符 :map viw 告诉vim按下空格的时候选中整个单词 :map dd 可以使用ctrl+d执行dd删除一行 " 模式映射 Vim常用模式normal/visual/insert都可以定义映射 用nmap/vmap/imap定义映射只在normal/visual/insert分别有效 :vmap \ U 把在visual模式下选中的文本大小(u/U转换大小写) 想想我们如何在insert模式下映射ctrl+d来删除一行? " 递归与非递归映射 *map系列命令有递归的风险 如果你安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效 想要保证插件映射没有冲突会非常痛苦 解决方案就是使用非递归映射 " 非递归映射 Vi提供了非递割归映射,这些命令不会递归解释 使用*map对应的nnoremap/vnoremap/inoremap 何时使用递归映射(*map)?何时使用非递归映射呢?(*nnoremap) 『任何』时候你都应该使用非递归映射,拯救自己和插件作者 ``` ## 4. 安装和使用插件 ### 4.1 安装你的第一个插件 ```shell " 什么是插件? 和其他现代流行编辑器一样,V同样支持强大的插件扩展 Vim插件是使用vimscript或者其他语言编写的vim功能扩展 编辑器自带的功能有限,有了插件之后几乎可以无限制扩充其功能 网络上比如github.com等有很多开源的vim插件可以使用 " 如何安装插件? 原始的方式是直接clone插件代码,如今vim有很多插件管理器 目前Vm有很多插件管理器可供选择,你可以选择一个顺手的 常见的有vim-plug,Vundle,Pathogen,Dein.Vim,volt等 综合性能、易用性、文档等几个方面,这里推荐使用vim-plug " 使用vim-plug安装插件 我们将使用vim-plug安装我们的第一个插件 https://github.com/junegunn/vim-plug 学习一个新东西的最好方式就是看官方的文档示例 按照官方的教程,我们就可以非常容易地了解它的使用方式 curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim " Reload .vimrc and :PlugInstall to install plugins. " 重新加载.vimrc 并执行如下命令 :PlugInstall :source % :PlugInstall ``` #### 4.1.1 安装开屏插件[vim-startify](https://github.com/mhinz/vim-startify) ```shell " 下载好插件管理vim-plug后,在vimrc里配置如下 call plug#begin() " The default plugin directory will be as follows: " - Vim (Linux/macOS): '~/.vim/plugged' " - Vim (Windows): '~/vimfiles/plugged' " - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged' " You can specify a custom plugin directory by passing it as the argument " - e.g. `call plug#begin('~/.vim/plugged')` " - Avoid using standard Vim directory names like 'plugin' " Make sure you use single quotes Plug 'mhinz/vim-startify' " Initialize plugin system " - Automatically executes `filetype plugin indent on` and `syntax enable`. call plug#end() " You can revert the settings after the call like so: " filetype indent off " Disable file-type-specific indentation " syntax off " Disable syntax highlighting ``` ### 4.2 如何寻找自己需要的插件 ```shell 如何搜寻插件 现有需求,后有插件。大部分插件托管在了github上 通过google搜索关键词寻找想要的插件 https://vimawesome.com/ 浏览网上开源的vm配置借鉴想要的插件 ``` ### 4.3 vim美化插件 ```shell " 状态栏 Plug 'vim-airline/vim-airline' " 缩进线 Plug 'yggdroot/indentline' " 开屏插件 Plug 'mhinz/vim-startify' " 主题 需要再最后加上 autocmd vimenter * ++nested colorscheme gruvbox Plug 'morhetz/gruvbox' ``` ### 4.4 vim文件目录和搜索插件,跳转文件so easy #### 4.4.1 nerdtree 文件目录 ```shell " nerdtree settings nnoremap f :NERDTreeFind nnoremap t :NERDTreeToggle " set width let NERDTreeWinSize=31 " show hidden files let NERDTreeShowHidden=1 " not show files listed let NERDTreeIgnore= [ \ '\.git$', '\.hg$', '\.svn$', '\.stversions$', '\.pyc$', '\.pyo$', '\.swp$', \ '\.DS_Store$', '\.sass-cache$', '__pycache__$', '\.egg-info$', '\.ropeproject$', \ ] " vim文件目录插件 Plug 'scrooloose/nerdtree' ``` #### 4.4.2 ctrlp文件搜索 ```shell " vim文件搜索插件 Plug 'kien/ctrlp.vim' ``` ### 4.5 vim快速定位插件 ```shell " vim快速定位插件 Plug 'easymotion/vim-easymotion' 使用 " easy-motion设置 nmap s (easymotion-s2) nmap t (easymotion-t2) ``` ### 4.6 vim编辑成双成对 ```shell " vim编辑括号插件 Plug 'tpope/vim-surround' vim-surround使用 normal模式下增加,删除,修改成对内容 ds (delete a surrounding) 例如:ds ( cs(change a surrounding) 例如:cs (] ys (you add a surrounding) 例如:ys iw " ``` ### 4.7 vim强大的vim模糊搜索和替换插件 #### 4.7.1 模糊搜索fzf.vim ```shell " 模糊搜索fzf.vim Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' 用法 :Files [PATH] :Ag [PATTERN] Ag 需要安装The Silver Searcher apt-get install silversearcher-ag ``` #### 4.7.2替换插件far.vim ```shell " 替换插件far.vim Plug 'brooth/far.vim' 用法 :Far foo bar **/*.py :Fardo ``` ### 4.8 使用python-mode打造轻量级IDE ```shell " Python-mode Python插件使用l比较多的是jedi-vim和python-mode https://github.com/python-mode/python-mode python-mode同样具备基本的补全、跳转、重构、格式化功能 即使是在服务器上也能愉快调试python代码了 " 检查vim版本 Vim >= 7.3 (most features needed +python3 support) (also --with-features=big if you want g:pymode_lint_signs). vim --version | grep python vim --version " 安装python-mode Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' } ``` ### 4.9 vim更愉快的浏览代码 ```shell " tagbar 代码大纲 想要支持多语言需要安装ctags Plug 'majutsushi/tagbar' :TagbarToggle " tagbar映射 nmap :TagbarToggle " vim-interestingwords 高亮单词 Plug 'lfv89/vim-interestingwords' k显示高亮 K清除高亮 ``` ### 4.10 vim补全插件 #### 4.10.1 deoplete插件 ```shell " vim补全插件 deoplete.nvim 需要pip3 install pynvim if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } else Plug 'Shougo/deoplete.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' endif let g:deoplete#enable_at_startup = 1 set completeopt-=preview ``` #### 4.10.2 coc插件 ```shell " coc 支持lsp协议 " curl -sL install-node.vercel.app/lts | bash " Use release branch (recommended) Plug 'neoclide/coc.nvim', {'branch': 'release'} ``` ### 4.11 格式化和静态检查插件 ```shell " 格式化插件neoformat 如:python需要安装pip install autopep8 Plug 'sbdchd/neoformat' 使用 :Neoformat " 静态检查 ALE (Asynchronous Lint Engine) 如果想忽视某些错误,查看官方文档或者在项目里配置pylint文件 Plug 'w0rp/ale' ``` ### 4.12 注释代码 ```shell " 格式化代码 gcc 注释代码 gcgc 去掉注释 Plug 'tpope/vim-commentary' 使用: gcc 注释代码 gcgc 去掉注释 ``` ### 4.13 vim和git联合 ```shell " 在vim使用git命令 Fugitive " 显示文件变更 set updatetime=100 gitgutter " 查看提交记录 gv.vim ``` ### 4.14 授人以渔 ```shell Vim插件干千万 本章我们介绍了如何安装和使用常见的插件 ◆Vm插件很多,不可能都全部介绍。学会自己寻找和安装 ◆通过搜索引擎google:关键词vimawesome/参考开源配置寻找插件 ◆学会阅读插件的Readme文件和doc里的帮助文件学习插件使用 缺什么就找什么插件吧! ``` ## 5. 与时俱进的VIM ### 5.1 与Tmux天作之合 ```shell " 详情见通用软件Tmux ``` ### 5.2 无处不在的VIM,让VIM嵌入你的开发工具 ```shell 几乎流行的编辑器和IDE都支持vim插件 让vim嵌入你的开发工具,甚至chrome都有vimium插件 ◆即使你不用m作为主力编辑器,依然可以使用它的编辑方式 ◆几乎流行的开发工具都支持vim插件,以vim的方式编辑 ◆比如Vscode/Atom/Pycharm等都支持安装vim插件 ``` ### 5.3 NeoVim ```shell Neovim 一个新的vim版本支持异步特性(vim8也支持) ◆https://neovim.io/ ◆开发更活跃,更丰富的特性和扩展,异步支持 ◆neovim的设计可以嵌入到很多GUI里,加上好看的『外壳』 Ubuntu安装最新neovim sudo apt-add-repository ppa:neovim-ppa/unstable sudo apt-get update sudo apt-get install neovim 卸载 sudo apt autoremove neovim ``` ### 5.4 站在巨人的肩膀上,使用开源的VIM配置 ```shell 开箱即用 如果你已经熟悉了Vm配置,可以从网上直接使用一些开源配置 https://github.com/SpaceVim/SpaceVim https://github.com/PegasusWang/vim-config 其他开源配置。不推荐新手直接使用,越复杂的配置上手成本越高 ``` ## 6. Vim虐我千百遍,我待Vim如初恋 ```shell 学习方法 熟练vim靠的是肌肉记忆。脱离鼠标编辑能提升编辑效率 ◆虽然讲了这么多,vⅵm仍然很多东西没有讲,时不时发现一些技巧 ◆在学中练,在练中学。熟能生巧,肌肉记忆 ◆衡量投入产出比,是点到为止还是继续深入 继续练级 网络上很多vm的资源,甚至练习的小游戏 《Practical vim》 《笨方法学vimscript)》 学习和开发自己的插件 ``` # 装机 | | 配置1 | 单价 | 配置2 | 单价 | | | ----- | ---------------------------------------------- | -------------------------------------- | ------- | ---- | ---- | | CPU | i7-13700KF(16核24线)或i5-13600KF(14核20线) | 官方价格2899/2149
散片价格2619/1925 | 7800X3D | 2672 | | | 主板 | 华硕B760M-PLUS WIFI重炮手(中版)DDR5 7200频率 | 1299 | | 1200 | | | 散热 | 水冷或风冷 | 700 | | | | | 显卡 | | | 7900xtx | 7000 | | | 内存 | 宏碁掠夺者16Gx2 DDR5 6600频率 | 799 | | | | | 硬盘1 | 致钛TiPro7000 Gen4 2TB | 939 | | | | | 硬盘2 | | | | | | | 电源 | 鑫谷/追风 | 799/899 | | | | | 机箱 | | | | 1599 | | | 风扇 | | | | | | | | | | | | |