一、准备一份用于练习的文件

我这里随便选了个python文件,作为test.py

#!/bin/bash

flag1=0 # 确认用户名是否被注册过的标识
user_table="user_info"
db_name="your_database_name"
db_host="your_database_host"
db_user="your_database_user"
db_password="your_database_password" echo "欢迎来到注册登录系统!" # 连接到数据库
connect_db() {
mysql -h ${db_host} -u ${db_user} -p${db_password} ${db_name} -e "$1"
} # 创建用户信息表
create_user_table() {
create_table_query="CREATE TABLE IF NOT EXISTS ${user_table} (username VARCHAR(255), password VARCHAR(255));"
connect_db "${create_table_query}"
} # 检查用户名是否已存在
check_existing_username() {
check_username_query="SELECT COUNT(*) FROM ${user_table} WHERE username = '$1';"
result=$(connect_db "${check_username_query}")
if [ ${result} -eq 1 ]; then
flag1=1
fi
} # 登录函数
login() {
echo "登录"
login_success=0 while true
do
read -p "请输入你的用户名:" username
read -p "请输入你的密码:" passwd
check_login_query="SELECT COUNT(*) FROM ${user_table} WHERE username = '$username' AND password = '$passwd';"
result=$(connect_db "${check_login_query}")
if [ ${result} -eq 1 ]; then
echo "登录成功"
login_success=1
break
else
echo "用户名或密码错误,请重新输入"
continue
fi
done
} # 注册函数
register() {
echo "注册" while true
do
read -p "请输入你要注册的账号:" username
check_existing_username ${username}
if [ ${flag1} -eq 1 ]; then
echo "用户名已经存在,请换一个用户名!"
continue
fi
break
done while true
do
read -p "请输入你注册的密码:" passwd1
read -p "请再次输入你的密码:" passwd2
if [ "$passwd1" == "$passwd2" ]; then
echo "注册成功"
insert_user_query="INSERT INTO ${user_table} (username, password) VALUES ('$username', '$passwd1');"
connect_db "${insert_user_query}"
break
else
echo "两次密码输入不一致"
continue
fi
done
} # 主循环
while true
do
read -p "请输入你的选择,1为登录,2为注册,q为退出:" select if [ ${select} == "1" ]; then
login
elif [ ${select} == "2" ]; then
register
elif [ ${select} == "q" ]; then
break
else
echo "输入有误"
fi
done

二、命令模式下的快捷键

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

1、移动光标

  • 上:k/↑
  • 下:j/↓
  • 左:h/←
  • 右:l/→

2、删除文字

  • x:删除光标选中的字符
  • dd:删除光标所在行
  • dw:删除光标所在位置的单词或者文字,包括test.py里面的user_table、确认用户名是否被注册过的标识。中文中包含特殊字符就会删除截止到特殊字符
  • d5j:删除六行(包括光标所在行)
  • dG:删除光标所在位置到文件末尾的所有内容

3、复制粘贴

yy:复制

p:粘贴

4、撤销上一次操作

u

5、恢复上一次撤销的操作

Ctrl+r

6、查找

/

7、替换单个字符

r:选中要替换的字符

然后输入想要替换的内容

8、光标移动到最左边

0

9、光标移动到行尾

$

10、跳转

gg:跳转到文档首行

G:跳转到文档末行

11、翻页

Ctrl+f:向下翻页

Ctrl+b:向上翻页

Ctrl+d:向下滚动半屏

Ctrl+y:向上一行一行翻页

12、删除全文

gg dG

常用方法列表

移动光标的方法

h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)

文本的搜索与替换

/word 向光标之下寻找一个名称为 word 的字符串。 (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 (常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

删除/剪切、复制与粘贴

x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除/剪切光标所在的那一整行(常用)
ndd n 为数字。删除/剪切光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在光标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10c ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

三、输入模式下的快捷键

在命令模式按下 i 就进入到了输入模式

1、自动补全

Ctrl+p/Ctrl+n

2、复制

Ctrl+e:逐字复制光标下一行的内容

Ctrl+y:逐字复制光标上一行的内容

3、定位行首和行尾

Home:定位到光标行首

End:定位到光标行尾

4、复制剪贴板的内容

shift+insert

5、删除光标前后的内容

删除光标之前的内容:Backspace

删除光标之后的内容:Delete

四、末行模式下的快捷键

在命令模式按下:(英文冒号)就进入到了末行模式

1、暂时给文档设置行号

:set nu

2、删除包含某关键字的行

:g/关键字/d

3、删除全文

G
:1,.d

4、末行模式下的储存、离开等指令

:w 将编辑的数据写入硬盘中(常用)
:w! 若文件属性为『只读』时,强制写入该文件。不过,到底能不能写入, 还是跟你对该文件的权限有关
:q 离开 vi (常用)
:q! 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
:x 效果等同于(保存并退出)
:X 大写的X,用于加密文件
ZQ 不保存,强制退出。效果等同于:q!
:w [filename] 将编辑的数据储存成另一个文件(类似文件另存为)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到光标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到bash命令行下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息!

五、vim中文帮助文档

VIM 中文帮助: 总览最常用的命令 (sourceforge.net)

vim的各种快捷键的更多相关文章

  1. vim分屏快捷键使用/增大/减小字体使用

    问题描述: vim分屏快捷键使用 问题解决:         (1)vim 分屏快捷键           (2)vim高度改变          (3)vim中增加和减少字体大小  使用快捷键Ctr ...

  2. vim技巧:折叠快捷键

    vim技巧:折叠快捷键 以前用的挺熟的,一段时间不用了,快捷键又忘了,不得不重新再看手册,今天专门整理一下,以后查找起来也比较方便. zc 折叠,只折叠最外层的折叠zC 对所在范围内所有嵌套的折叠点进 ...

  3. Sublime编辑器上的Linux Vim插件常用快捷键

    Sublime编辑器上的 Vim 插件常用快捷键 vim 的设置: 在Reference-> User Settings(首选项--> 设置用户) 选项,点击进入配置文件编辑状态,默认的用 ...

  4. Linux学习之十三-vi和vim编辑器及其快捷键

    vi和vim编辑器及其快捷键 1.vi与vim区别 它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面. vim的这些优势主要体现在以下几个方 ...

  5. VIM 第二天--快捷键

    好吧,今天是重新学习vim的第二天,不得不说,收货丰厚. 先来勉励一下自己: 存活(目前状态) 感觉很好 感觉更好,更强,更快 吃用vim超能力 vimtutor练到lesson 7了,略微总结一下, ...

  6. vi/vim的常用快捷键

    vi/vim分为 命令模式,插入模式(编辑模式),末行模式(最后一行) 模式的转换 ① 其它模式==>正常模式 按 Esc键 ②正常模式==>插入模式 按 i 在光标前插入 按 I 在行首 ...

  7. vim 常用 NERDTree 快捷键

    ctrl + w + h 光标 focus 左侧树形目录 ctrl + w + l 光标 focus 右侧文件显示窗口 ctrl + w + w 光标自动在左右侧窗口切换 ctrl + w + r 移 ...

  8. Vim 使用入门快捷键

    Vim 和 Emac 都是利器啊,前段时间决定熟悉一套跨平台的编辑器,以便在 Win,Mac,Ubuntu 下都有相同的编辑体验. 于是尝试了一下 Vim,使用了一段时间,确实比 UE 之类的要高效. ...

  9. vim指令,快捷键汇总

    Vim 命令.操作.快捷键全集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vi ...

  10. Vim 经常使用快捷键及键盘图

    Vim经常使用的快捷键 h - 光标左移一个字符   j - 光标下移一个字符 k - 光标上移一个字符   l - 光标右移一个字符  下移15行 - 15j Ctrl + f - 屏幕向下移动一页 ...

随机推荐

  1. 【技术积累】Linux中的命令行【理论篇】【六】

    as命令 命令介绍 在Linux中,as命令是一个汇编器,用于将汇编语言源代码转换为可执行的目标文件.它是GNU Binutils软件包的一部分,提供了一系列用于处理二进制文件的工具. 命令说明 as ...

  2. PHP秒杀面试题

    什么是秒杀系统:秒杀系统是一个处理大量并发用户请求的系统,通常用于限时促销或特定活动中,用户可以在特定时间内以抢购的方式购买商品或服务. 秒杀系统可能面临的挑战是什么?秒杀系统可能面临以下挑战: 高并 ...

  3. 重学HTTP:理解同源策略和CORS

    ​每次遇到跨域.代理.CORS这几个词都懵懵的,我决定一次把他们都搞明白,以后遇到他们再也不用害怕了. 一.什么是同源策略? 同源策略是在1995年由 Netscape公司引入到浏览器的,目前所有浏览 ...

  4. 2023-08-12:用go语言写算法。实验室需要配制一种溶液,现在研究员面前有n种该物质的溶液, 每一种有无限多瓶,第i种的溶液体积为v[i],里面含有w[i]单位的该物质, 研究员每次可以选择一瓶

    2023-08-12:用go语言写算法.实验室需要配制一种溶液,现在研究员面前有n种该物质的溶液, 每一种有无限多瓶,第i种的溶液体积为v[i],里面含有w[i]单位的该物质, 研究员每次可以选择一瓶 ...

  5. __wakeup()魔术方法绕过(CVE-2016-7124)

    __wakeup()魔术方法绕过(CVE-2016-7124) 漏洞简介 在php反序列化数据过程中,如果类中存在__wakeup方法,调用 unserilize() 方法前则先调用__wakeup方 ...

  6. react项目搭建-路由封装

    router v6 路由统一管理与添加,对是否登录进行判断. 1.使用脚手架创建项目 新建一个文件夹 ,在文件夹内部打开命令行工具. 执行命令:npx create-react-app 项目名字 将项 ...

  7. 三维模型OSGB格式轻量化顶点压缩主要技术方法分析

    三维模型OSGB格式轻量化顶点压缩主要技术方法分析 在三维模型应用中,轻量化处理是提高数据传输效率.减少渲染时间和优化用户体验的重要手段.而OSGB格式是一种常见的三维模型格式,在进行轻量化处理时,顶 ...

  8. 按关键字API接口搜索天眼查企业数据

    一.如果你想要查找某一个企业的基本信息或是对行业中的企业进行筛选,那么使用API接口搜索天眼查企业数据会非常方便. 首先,你需要获取天眼查API的access_token,这可以通过注册账号获取.一旦 ...

  9. C# MySqlHelp类 "DbModel.MySql"数据库操作类

    以前做易语言/PHP的. 最近刚入门C#, 就简单的封装了一个类库, 边学边玩才容易学到东西嘛, 比起sqlserver, 我还是觉得mysql更加有亲切感; 于是模仿ThinkPHP编写了一个&qu ...

  10. MySQL篇:第一章_软件安装和基本操作

    本篇安装软件Navicate Premium 16破解版和phpstudy_pro phpstudy_pro安装教程 phpstudy官网:https://www.xp.cn/download.htm ...