随机学习提升Python

Vim基础学习

2020-08-09  本文已影响0人  WhiteStruggle

简介

Vim编辑程序有三种操作模式

Vim 的 -b 选项是告诉 Vim 打开的是一个二进制文件

基本操作

  1. i 进入插入模式,输入内容
  2. Esc 退出编辑
  3. 输入 :wq + Enter 退出保存

编辑模式

Vim编辑方式的主要用途是在被编辑的文件中 移动光标 的位置。

可以进行 剪切粘贴正文块,删除正文和插入新的正文

跳转

→ 或 k          # 上移
← 或 j          # 下移
↑  或 h          # 左移
↓  或 l          # 右移
#       当光标停留在 单词上 ,# 会在文件内搜索该单词,每按一次就会跳转到 "上一个"

*       当光标停留在 单词上 ,* 会在文件内搜索该单词,每按一次就会跳转到 "下一个"

|       跳转到 "当前行开头"
0       数字零,跳转到 "当前行开头"

$       跳转到 "当前行末尾"

段落区分:即通过空行进行分割,每一块称为一个段落
{       跳转到 "当上一段落结尾",若为开头,就跳转当 "前段落开头"
}       跳转到 "当前段落结尾"


g_      跳转到本行最后一个不是 blank 字符的位置。
G         跳转到 "最后一行开头"
gg        跳转到 "第一行开头"
nG 或 ngg 跳转到 "第n行"
例如: 
      4G    # 表示跳转到第四行
      5gg   # 表示跳转到第五行
      
L       跳转到 "屏幕最后一行"
M       跳转到 "屏幕中间行"
H       跳转到 "屏幕的第一行"

可以采用 "数字 + L/H"  的方式
例如: 
    3H    # 表示跳转到当前屏幕的第三行
    2L    # 表示跳转到当前屏幕的倒数第二行

字母移动

w       移动到 "下一个单词开头"

e       当光标位于 "单词中",会移动到 "单词末尾"
        当光标位于 "单词结尾",会移动到 "下一个单词末尾"
        
b       当光标位于 "单词中",会移动到 "当前单词开头"
        当光标位于 "单词开头",会移动到 "上一个单词开头"

当内容过多,造成分页时

ctrl+f      在文件中前移一页(相当于 page down)
ctrl+b      在文件中后移一页(相当于 page up)

搜索匹配

/str     # "从前往后" 搜索 str,找到第一个就停止

?str     # "从后向前" 搜索 str,找到第一个就停止

替换和删除

替换

rc          # 用 "字符c" 替换光标位置的内容
nrc         # 用 "n" 个 "字符c" 替换光标及其后 "n-1" 个字符

删除

x       # 删除当前光标的字符
nx      # 删除当前光标的字符以及其后 "n-1" 个字符

dw      # 删除光标及其 "后边" 字符,直到遇到空字符,或结尾
例如:
        "HelloWorld"  光标在 W 上,删除之后还剩下 "Hello"
        "Hello world" 光标在 e 上,删除之后还剩下 "Hworld"
        "Hello world" 光标在 o 上,删除之后还剩下 "Hellworld"
        "Hello world" 光标在 单词之间的空白 上,删除之后还剩下 "Helloworld"
ndw     # 删除 光标后 "n 个 单词",包括分隔用到空字符或者换行字符
例如:
    "this is delete , there are problems" 光标 在this的 h 上 ,键入 "3dw" ,结果还剩下 "t, there are problems"

db      # 删除光标及其 "左边" 字符,直到遇到空字符,或开头
ndb     # 删除 光标前 "n 个 单词" ,包括分隔用到空字符或者换行字符

dd      # 删除(剪切)所在行,移除删除时留下的空行
ndd     # 删除(剪切)光标n行,移除删除时留下的空行

常用删除

d$      # 删除本行 光标之后 的全部内容

d0      # 删除本行 光标之前 的全部内容

J       # 删除本行的回车符( CR ),与下一行合并,用 空格间隔

Vim常规的替换命令有 cs
,并由 编辑模式 进入 插入模式

s       # 删除 "光标处的字符",并开启插入模式
ns      # 删除 "光标处及其后 n-1 个字符",并开启插入模式
        # 当到达行尾就不再删除

S       # 删除 "本行的全部内容",并开启插入模式
nS      # 删除 "光标行及其后 n-1 行的全部内容",并开启插入模式

cw 或 cW # 删除光标 "右边" 的内容,直到遇到空格或换行,并开启插入模式
         # 类似于 "dw",但会开启插入模式
ncw      # 删除 光标后 "n 个 单词",包括分隔用到空字符或者换行字符,并开启插入模式
         # 类似于 "ndw",但会开启插入模式

cb 或 cB # 删除光标 "左边" 的内容,直到遇到空格或换行,并开启插入模式
         # 类似于 "db",但会开启插入模式
ncb      # 删除 光标后 "n 个 单词",包括分隔用到空字符或者换行字符,并开启插入模式
         # 类似于 "ndb",但会开启插入模式

cd      # 删除 "当前行",并开启插入模式
        # 类似于 "dd",但会开启插入模式
ncd     # 删除 "n行" ,并开启插入模式
        # 类似于 "ndd",但会开启插入模式

c$      # 删除本行 "光标之后" 的全部内容,并开启插入模式
        # 类似于 "d$",但会开启插入模式
c0      # 删除本行 "光标之前" 的全部内容,并开启插入模式
        # 类似于 "d0",但会开启插入模式

复制粘贴

粘贴:

p       # 小写字母 p,将 "缓冲区" 的内容粘贴到光标的 "后面";
P       # 大写字母 P,将 "缓冲区" 的内容粘贴到光标的 "前面"。

复制:

yy      # "复制当前行" 到 "缓冲区"
nyy     # "复制n行" 到 "缓冲区"

"+yy     # 复制 当前行 到 剪切板
"+y      # 复制 当前行以及下一行
"+nyy    # 复制 n行 到 剪切板

"+ 一些vim可能不支持
查看是否支持clipboard(clipboard 前是 - 号就不支持) :  vim --version | grep "clipboard"
不支持,就安装图形化界面 :sudo apt-get install vim-gnome

撤销和重复

u       # 撤销上一步操作

.       # 重复最后一条修正的命令

退出

ZZ      # 保存并退出vim编辑界面

插入模式

输入 i 进入插入模式

i           # 启动插入模式,在光标左侧添加内容
I           # 启动插入模式,光标移动到所在行开头
a           # 启动插入模式,光标向右移动一位,然后在左侧添加内容
o           # 启动插入模式,在光标所在行的下一行产生新行,并跳到新行
O           # 启动插入模式,在光标所在行的上一行产生新行,并跳到新行
A           # 启动插入模式,光标跳到所在行末尾

退出

ESCCrtl+[ 退出插入模式

命令模式

在编辑模式下键入 : ,光标就跳到屏幕最后一行,并在那里显示冒号,便进入 命令模式

:w

保存当前编辑的文件

:w

当前文件另存为

:w 另存文件的路径

:e

在启动的Vim中打开一个文件

:e 文件路径

:q

退出编辑程序

:q          # 在未修改的情况下退出

:q!         # 放弃所有修改,退出编辑

:wq

保存并退出

:wq

:n

移动光标到指定行

:n          # 将光标移动到第  n 行
:5              # 将光标移动到第  5 行
:5 w file       # 将第五行写入 file 文件(file文件不能存在)
:2,5 w file     # 将2 到 5 行的内容写入到 file 文件中(file文件不能存在,原文件的行数必须存在)
:.,.+5 w file   # 将当前行以及其后 5 行 写入到file文件中
:1,$ w file     # 将全部内容写入到file文件中(file文件不能存在),相当于 ":w file "

:r

读取文件内容,插入到光标所在行的后面

:r              # 将本文件的内容插入到当前光标所在行的末尾
                # 注意保存,若不保存只会复制上一次保存的内容

:r file         # 将file文件的内容,插入到当前光标所在行的末尾

:f

查看当前文件的名称、状态

文件位置,行数,是否保存,光标所在行

:f

复制当前文件

:f file         # 将当前文件复制到file

字符串搜索

字符串搜索,给定字符串,可以通过搜索该字符串,到达 该 字符串出现的行

正向搜索

:/str/          # 以光标所在行为基础, 将光标移到下一个包含 字符串str 的行 的开头

反向搜素

:?str?          # 以光标所在行为基础,将光标移到上一个包含 字符串str 的行 的开头

注意:当要搜索的字符串出现在光标所在行,进行搜索时,会被忽略

例:

:?str1?,/str2/ w file 
:/str1/,?str2? w file 
:?str1?,?str2? w file 
:/str1/,/str2/ w file       

# 将匹配到的两行及其之间的行写入 file文件中

注意某些情况下,会产生 "逆向范围",会将这两行之间的所有内容写入到文件file中

正则表达式

Vim在进行指定字符串搜索时,可以包含特殊含义的字符,这些特殊字符的搜索字符串称为 正则表达式

^str           # 搜索以str "开头" 的行
元字符 说明
. 匹配任意非空字符,不包括换行符
[abc] 匹配括号内的任意一个字符,可以用 - 表示字符范围
[^abc] 匹配方括号之外的任意字符
\d 匹配数字,等同于[0-9]
\D 匹配数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制的数字,等同于[0-9A-Fa-f]
\X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\w 匹配数字和字母,等同于[0-9A-Za-z]
\W 匹配数字和字母以外的任意字符,等同于[^0-9A-Za-z]
\t 匹配 tab 字符
\s 匹配空白字符,等同于[ \t],即 空格 和 tab
\S 匹配非空字符,等同于[^ \t],
元字符 说明
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个
元字符 说明
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾

正文替换

利用 :s 命令可以实现字符串的替换。

"%"     # 表示替换范围是所有行,即全文

"s"     # 表示后面跟着一串替换命令

"g"     # 放在命令的末尾,表示对搜索字符串进行替换,(多次替换)

默认情况下,不加 "g" ,表示只对搜索字符串的首次出现进行替换

`g` 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作;

存在问题:当替换的字符串长度大于原字符串,在替换时,覆盖文本中其他字符串

:s/str1/str2/       # 用 str2 替换 "光标所在行" ,出现的 "首个 str1"

:%s/str1/str2/      # 用 str2 替换   "所有行"  ,出现的 "首个 str1"

:%s/str1/str2/g     # 用 str2 替换   "所有行"  ,出现的 "所有 str1"

:.,$ s/str1/str2/   # 用 str2 替换   "光标所在行到最后一行"  ,出现的 "所有 str1"

:1,$ s/str1/str2/   # 用 str2 替换   "第一行到最后一行"  ,出现的 "所有 str1"

:g/str1/s /str2/g   # # 用 str2 替换   "所有行"  ,出现的 "所有 str1"

统计文件中字符串出现的次数:

:%s/str1/&/gn

删除正文

:d              # 删除光标所在行
:nd             # 删除指定行,n为数字
:.,$ d          # 删除当前行到结尾的全部内容
:/str1/ , /str2/d   # 以光标所在行为基准,删除 从 str1 到 str2 的所有行
                    # 若光标所在行以下内容不存在,而光标以上内容,存在则会提示 "逆向范围"
                    # 这个存在着很多的问题,谨慎使用

Vim的删除命令 :d,高级删除命令 一般结合 正则表达式 实现

恢复文件

Vim在编辑文件时,会产生一个临时文件,通常以 . 开头,以 .swp 结尾

Vim正常退出时,该文件会被删除

若意外退出,没有保存修改,则可以使用 :recover 来恢复文件,也可以在启动 Vim时用 -r选项

使用vim创建了一个2.txt,但没有保存直接退出
vim -r /mysh/2.txt

恢复时的提示:

使用交换文件 "/mysh/.2.txt.swp"
"/mysh/2.txt" [新文件]
恢复完毕。请确定一切正常。
(你可能想要将这个文件另存为别的文件名
and run diff with the original file to check for changes)
You may want to delete the .swp file now.

请按 ENTER 或其它命令继续

选项设置

利用 :set 命令可以设置选项

语法:
    :set options        # options 选项设置

option取值:

ignorecase      # 忽略规则表达式中大小写字母的区别

autoindex       # 正文自动缩进

number          # 显示正文行号

ruler           # 在屏幕底部显示光标坐在行 、列的位置,应该不需要设置吧,默认就显示

tabstop         # 设置tab键,跳过的空格数

Shell切换

在vim中执行执行linux命令

:!linux命令     # 执行完linux命令,会返回vim界面

分屏

打开一个Vim程序只能查看一个文件,若想要查看多个文件,需要使用 Vim分屏与标签页功能

分屏:

:split     简写: :sp      # 上下分屏

:vsplit    简写: :vsp     # 左右分屏

启动 Vim 时分屏


切换分屏

Crtl+w+k        # 切换到上分屏
Crtl+w+j        # 切换到下分屏


Crtl+w+h        # 切换到左分屏
Crtl+w+l        # 切换到右分屏

Ctrl+w+w        # 来跳转分屏,方向则是在当前Vim窗口所有分屏中,按照逆时针方向跳转。

设置分屏的长 宽

Ctrl+W =            # 设置分屏的宽高平均分配
Ctrl+W +            # 增加当前分屏的 "高度"
Ctrl+W -            # 降低当前分屏的 "高度"

Ctrl+W >            # 增加当前分屏的 "宽"
Ctrl+W <            # 降低当前分屏的 "宽"

标签页

一个标签页打开一个Vim的窗口,一个Vim的窗口可以支持N个分屏。

新建标签命令:

:tabnew
或
:tabe

新建标签页并打开一个文件

:tabnew 文件路径
或
:tabe 文件路径

Vim的每一个标签都有唯一的数字标号,第一个标签页的序号是 0,从左向右依次 +1


:tabn           # 跳转到 "下一个" 标签
:tabn n         # 跳转到 当前页"右边第 n 个" 标签

:tabN           # 跳转到 "上一个" 标签
:tabN n         # 跳转到 当前页"左边第 n 个" 标签

:tabp           # 跳转到 "上一个" 标签
:tabp n         # 跳转到 当前页"左边第 n 个" 标签

:tabr           # 跳转到 "第一个" 标签
:tabfir         # 跳转到 "第一个" 标签

:tabl           # 跳转到 "最后一个" 标签

:tabc           # 关闭当前标签
:tabo           # 关闭除了当前的所有标签 ( 关闭前都需要保存,否则不能关闭 ) 

:tabm n         # 跳转到 "第 n 个" 标签

:tabf path      # 在打开的标签页中 寻找 'path' ,
                # 若 'path' 的路径下文件已经打开,就跳转
                # 若 'path' 的路径下文件没有打开,则会直接打开
                # 若 'path' 的文件不存在,就会报错
                
:tabs           # 查看当前打开的所有标签页的信息
:tabdo                  为每个标签页执行命令

参考: Vim入门基础

上一篇下一篇

猜你喜欢

热点阅读