转存-Vim配置

以后可能有用(

转自 \(\text{CmsMartin}\) 大佬的博客

这里是 \(\text{CmsMartin}\) 大佬的主页


Vim 是 Vi IMproved 的首字母缩写。它是由 Bram Moolenaar 编写的免费开源文本编辑器。 它于 1991 年首次针对 UNIX 类系统发布,其主要目标是为 Vi 编辑器提供增强功能。 Vim 被认为是克隆 Vi 编辑器。 像 Vi 一样,它也是以命令为中心的编辑器。学习 Vim 的一个优点是 - 它随处可用。 采用任何 UNIX 类系统,如 Linux,Mac,HP-UX,AIX 等等,默认情况下Vim是安装在系统中的。 ——来源

当然,NOI 竞赛也是可以用的。

本文仅针对 Linux 操作系统!!!

注:本文所有的操作实在基于 Windows 的 Linux 发行版上进行的。

目录

  1. 安装 Vim

  2. Vim 的基本操作

  3. Vim 进入插入模式的方式

  4. Vim 命令模式基本操作

  5. Vim 普通模式基本快捷键

  6. Vim 的基本配置

安装 Vim

  1. 使用 yum 下载 Vim:
yum install vim
  1. 使用 apt-get 下载 Vim:
sudo apt-get update 
sudo apt-get install vim

接下来就可以用 which 命令查找了

Vim 的基本操作

模式

Vim 有两种模式:

  • 正常模式 (Normal-mode)

  • 插入模式 (Insert-mode)

  • 命令模式 (Command-mode)

  • 可视模式 (Visual-mode)

在此我们仅讨论前三种模式

正常模式 (Normal-mode)

正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。

正常模式也是一开始进入 Vim 时默认的模式。

或者可以通过敲下 Esc 键切换至该模式

插入模式 (Insert-mode)

插入模式顾名思义,就是编辑的模式,可以通过摁下一些特定字母进入,后文会详

细介绍。

命令模式

在正常模式中,按下 :(冒号)键或者 / (斜杠),会进入命令模式。

在命令模式中可以执行一些输入并执行一些 Vim 或插件提供的指令,就像在命令行里一样。

使用 Vim 打开文件

打开单个文件

假设你要打开的文件名为 AKIOI.cpp;

那么只需在命令行嵌入 vim AKIOI.cpp 即可。

打开多个文件

假设你要打开两个文件,名字分别为 AKNOI.cpp 和 AKIOI.cpp

那么只需要在命令行嵌入 vim AKNOI.cpp AKIOI.cpp 即可

打开多个文件后默认 Vim 是停留在第一个文件(即用例中的 AKNOI.cpp),那么如何切换至其他的文件呢?

首先我们需要进入命令模式,在嵌入命令 ls 查看我们现在打开的文件,如图

我们可以嵌入 b1 来切换至第一个文件,同理嵌入 b2 切换至第二个文件。

特别的,可以嵌入 bn 切换至下一个文件 , bp 切换至上一个文件。

但是,这样的效率比较慢,隔壁家 VsCode 可以分屏打开多个文件,咱 Vim 也行。

老规矩,假设要打开的文件是 AKNOI.cpp 和 AKIOI.cpp。

那么左右分屏打开这两个文件只需在命令行嵌入 vim -On AKNOI.cpp AKIOI.cpp 即可。

上下分屏打开这两个文件只需在命令行嵌入 vim -on AKNOI.cpp AKIOI.cpp 即可。

假设一个名为 AKIOI.cpp 的文件非常的长,但是你想上下对比着看这个文件,但不想翻页,那么只需在打开文件进入命令模式敲下 sp AKIOI.cpp 进行上下分屏(当然,接上其他的文件会向下分屏打开其他的文件)。

同理,嵌入 vsp AKIOI.cpp 进行左右分屏

分屏后,点击即可进入相应的文件(如果您为了装逼还可以查询 Ctrl + w 系列快捷键)。

弱弱的提一句,关闭分屏只需摁下 Ctrl + w + c。

Vim 进入插入模式的方式

注意:Vim 命令区分大小写!!!

  1. i 或者 Insert , 表示从光标所在位置开始插入字符(最常用);

  2. I ,表示从光标所在行开头开始插入字符(相当于 i + Home);

  3. a , 表示从光标所在位置后一个开始插入字符(相当于 i + \(\rightarrow\));

  4. A , 表示从光标所在行行尾插入字符(相当于 i + End);

  5. o , 表示从光标所在行下一行行首开始插入字符(相当于 i + End + Enter);

  6. O , 表示从光标所在行上一行行首开始插入字符(相当于 \(\uparrow\) + i + End + 'Enter');

  7. s , 表示删除光标所在处的字符然后插入字符(相当于 i + Delete);

  8. S , 表示删除光标所在行然后插入字符(相当于 dd + i)。

综上,只用学会 i 就好了

插入模式的使用和记事本基本没有区别。

Vim 命令模式基本操作

基本命令

  1. w , 表示保存文件(有时会提示需要强制保存,即为 w!);

  2. q , 表示退出文件(有时会提示需要强制退出,即为 q!);

  3. wq , 表示保存并退出(有时会提示需要强制保存并退出,即为 wq!);

  4. w file , 表示保存并写入 file;

  5. qa , 表示退出所有文件都不保存(有时会提示需要强制退出,即为 qa!);

  6. e file , 表示打开 file;

  7. e! , 表示放弃对文件的所有修改,恢复文件到上次保存的位置;

  8. saveas IOI.cpp , 表示另存为 IOI.cpp;

  9. Sex , 表示水平分割一个窗口,浏览文件系统;

  10. Vex , 表示垂直分割一个窗口,浏览文件系统。

保存并退出还可以在普通模式下快速嵌入 ZZ。

进阶命令

  1. set nu , 表示开启显示行号;

  1. set nonu , 表示关闭显示行号;

  2. set shiftwidth=n (n 为具体数字),表示将自动缩进设为 n (但不会改变 tab 的宽度);

  1. n (n 为具体数字) , 表示将光标移至第 n 行的缩进后(自认为很鸡肋的一个命令);

  2. /字符串 , 表示在文件中查找该字符串(区分大小写),匹配到后按下 n 查找下一个 , 按下 N 查找上一个(从光标开始查找);

该命令比较特殊,在普通模式下直接输入即可,不用输入 :

  1. ce , 表示将光标所在行文本居中;

  1. ri , 表示将光标所在行文本居右;

  2. le , 表示将光标所在行文本居左;

  3. set ic , 关闭区分大小写(关闭后查找 lxl 和查找 LXL 是一样的);

  1. set noic , 打开区分大小写;

  2. s/lxl/noip , 表示将当前行第一个 lxl 替换为 noip;

  1. s/lxl/noip/g , 表示将当前行所有的 lxl 替换为 noip;

第 11 和 第 12 的命令还有一个用法,就是在命令开头加上数字表示对指定行操作,或者加上 dollor符 表示最后一行,或者两个用逗号隔开的数字表示区间。

\(e.g.\)

将 520 行到 1314 行的 lxl 替换为 noip: 520,1314s/lxl/noip

将 最后一行的 lxl 替换为 noip: dollor符 s/lxl/noip

将 第 1 行的 lxl 替换为 noip: 1s/lxl/noip

  1. %s/lxl/noip , 表示将所有的 lxl 替换为 noip;

11~13 的命令:当然,被替换的字符穿可以用正则表达式。

  1. !Commond (其中 Commond 是 Linux 命令) , 表示执行 Linux 命令

如执行 !ping www.luogu.com.cn

  1. r !Commond (其中 Commond 是 Linux 命令) , 表示执行命令,并且添加结果至操作文本光标处;

示例: r !echo I Love LXL FOREVER

  1. map <key> <operation> , 表示设置快捷键 key 为操作 operation;

示例:设置 Ctrl + x 为显示行号,命令为:

map ^x <ESC>:set nu<ESC>

其中 ^x 的嵌入方式就是摁下 Ctrl + x,<ESC> 就是代表 ESC

  1. ab noip lxl , 表示将以后输入的 noip 自动替换为 lxl;

以上就是基本操作所需知道的命令啦!

Vim 普通模式基本快捷键

移动

  1. h 表示向左移动光标;

  2. l 表示相当于向右移动光标

  3. j 表示向下移动光标;

  4. k 表示向上移动光标。

1 ~ 4 用好了可以代替 \(\leftarrow,\uparrow,\downarrow,\to\)

  1. 0 表示移动到当前行行头,相当于 Home 键;

  2. ^ 表示移动到当前行第一个非 blank 的字符;

  3. \(\$\) 表示移动到当前行行尾,相当与 End 键(忽视 dollar 符后的反斜杠);

  4. g_ 表示移动到当前行最后一个非 blank 的字符;

  5. w 表示移动到本行下一个单词开头;

  6. e 表示移动到本行下一个单词结尾;

  7. B 表示移动到本行上一个单词开头;

  8. fa 表示移动到本行下一个 a 字符处;

  9. nfa (\(n\) 是自然数) 表示移动至光标后第 \(n\) 个 a 字符处;

  10. nG 表示移动至第 \(n\) 行的行首;

  11. H 表示移动至当前显示的文档第一行行首;

  12. M 表示移动至当前显示的文档中间行行首;

  13. H 表示移动至当前显示的文档最后一行行首;

  14. gg 表示移动到第一行行首;

  15. G 表示移动到最后一行行首;

  16. zt 表示将当前行移动至当前显示的文档第一行;

  17. zz 表示将当前行移动至当前显示的文档中间行;

  18. zb 表示将当前行移动至当前显示的文档最后一行;

  19. Ctrl + d 表示向下翻半页;

  20. Ctrl + u 表示向上翻半页;

  21. Ctrl + f 表示向上翻整页;

  22. Ctrl + b 表示向下翻整页;

复制、删除

  1. x 表示删除光标后的字符;

  2. X 表示删除光标前的字符;

  3. dd 表示删除光标所在行;

  4. ndd (n 是自然数) 表示删除光标所在行(包括)下的 n 行

  5. d1G 表示删除光标所在行到第一行;

  6. dG 表示删除光标所在行到最后一行;

  7. d\(\$\) 表示删除光标所在字符到光标所在行最后一个字符(同上,不用管美元符号);

  8. d0 表示删除光标所在字符到光标所在行第一个字符;

  9. yy 复制光标所在行;

  10. nyy (n 是自然数) 表示复制光标所在行(包括)下的 n 行

  11. y1G 表示复制光标所在行到第一行;

  12. yG 表示复制光标所在行到最后一行;

  13. y\(\$\) 表示复制光标所在字符到光标所在行最后一个字符(同上,不用管美元符号);

  14. y0 表示复制光标所在字符到光标所在行第一个字符;

  15. u 表示撤销上一个操作;

  16. Ctrl + r 表示反撤销

  17. p 表示粘贴内容,如果复制内容是整行,则从下一行开始粘贴。如果复制的是一部分内容,则从光标的下一个字符开始粘贴;

  18. P 表示粘贴内容,如果复制内容是整行,则从上一行开始粘贴。如果复制的是一部分内容,则从光标所在位置开始粘贴。

Vim 的基本配置

配置文件

配置文件分为两种,一种是系统配置文件,存放于 /usr/share/vim/vimrc , 另一种是用户配置文件,存放于用户主目录 ~/.vimrc 中。

没有可以自行新建。

注意:用户配置文件高于系统配置文件!

基本方法

先打开配置文件,然后开始配置。

  1. 突出显示当前行: set cul;

  2. 突出显示当前列: set cuc;

  3. 显示行号: set nu;

  4. 显示括号匹配: set showmatch;

  5. 设置 tab 长度为 \(4\) 个空格: set tabstop=4;

  6. 设置自动缩进长度为 \(4\) 个空格:set shiftwidth=4;

  7. 继承上一行的缩进方式: set autoindent;

  8. 显示光标所在位置: set ruler;

  9. 设置中文编码:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

  1. 开启语法高亮: syntax on

  2. 开启文件类型检测: filetype plugin indent on

其实还有很多配置,可以自己去查资料了解。

最后奉上蒟蒻的配置:(蒟蒻配置了 F5 一键运行)

set nu
set tabstop=4
set showmatch
set cul
set shiftwidth=4
syntax on
set ruler
filetype plugin indent on
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set autoindent

map <F5> :call CompileRunGcc()<CR>

func! CompileRunGcc()
    exec "w"
    if &filetype == 'c'
        exec '!g++ % -o %.exe'
        exec '!time ./%.exe'
    elseif &filetype == 'cpp'
        exec '!g++ % -o %.exe -sdt=c++14 -O2'
        exec '!time ./%.exe'
    elseif &filetype == 'python'
        exec '!time python %'
    elseif &filetype == 'sh'
        :!time bash %
    endif
endfunc

posted @ 2022-10-18 19:20  char_phi  阅读(76)  评论(0)    收藏  举报