vi/vim
vi/vim简介
vim:the ubiquitous text editor
vim是Unix类的必装工具,主要优势在于适用于嵌入式设备,用命令行方式编辑文本,而vi作为vim的简化版本,严格来说,vi才是更单纯的文本编辑器,vim已经拓展成为一种开发工具
vi的模式
vi/vim的模式有三种:命令模式,输入模式,底线命令模式;
1.命令模式:Command mode,刚启动vi/vim时,就进入了命令模式,此时vi只能对输入的命令做出反应;
2.输入模式:Insert mode,在命令模式下,输入i,a,o(不分大小写)均可以进入输入模式,此时才可以进行编辑,如果输入<Esc>,则退出回到命令模式;
3.底线命令模式:Last line mode,在命令模式下,输入冒号字符":"进入底线命令模式,此时,vi可以对一些特殊命令做出反应,如果输入<Esc>,将会退出回到命令模式;
底线命令模式的常用指令:
q! 强制退出,不保存
wq 保存后退出
set nu 显示行号
q 正常退出
w 保存文件
vi在命令模式下的操作
移动光标:
h 向左 , j 向下 , k 向上 , l 向右
+ 移到下一行 , - 移到上一行
0 移到所在行的开头
$ 移到所在行的末尾
G 移到文件最后一行
gg 移到文件第一行
n<Enter> n为数字,向下移动n行
翻页:
Ctrl+f 向下移动一页
Ctrl+d 向下移动半页
Ctrl+b 向上移动一页
Ctrl+u 向上移动半页
删除:
x 向后删除一个字符
X 向前删除一个字符
dd 删除光标所在行
ndd 删除光标所在行向下n行
复制:
yy 复制光标所在行
nyy 复制光标所在行的向下n行
粘贴:
p 将已复制的数据粘贴到光标下一行
P 将已复制的数据粘贴到光标上一行
其他:
u 复原上一个动作(撤销)
Ctrl+r 重做一遍上一次的动作
vi在底线命令模式下的操作
搜索:
/word
向光标之下寻找word,按n光标移动到下一个word,N则向上搜索;
搜索并替换:
n1,n2s/word1/word2/g
n1,n2为数字,在n1行到n2行之间寻找word1,替换为word2,如果将g写成gc,每次替换时都会询问确认
其他:
w [filename] 保存,另存为,filename是可选参数
r [filename] 将filename的内容追加到当前光标的下一行
Visual Studio Code
Visual Studio Code支持Windows,OSX,Linux,内置JavaSkript,TypeSkript和Node.js支持,插件丰富,可以通过插件支持C++,C#,Python,php;
对于ubuntu,可以先下载"*.deb"文件,再通过apt安装:
sudo apt install "*.deb"
ubuntu上安装Visual Studio Code的界面如下:
Visual Studio Code有四个主要菜单:文件夹,搜索,git(版本控制),调试,插件生态系统
Git
git简介
git是目前世界上最先进的分布式版本控制系统,在git之前,主流的版本控制使用Subversion和Concurrent Version System,但它们是集中式的,即本地从服务器获取到文件,更改后必须提交到同一个服务器
关于git的故事
在2002年以前,Linux内核源码文件是通过diff(对比前后两次代码)的方式发给Linus,再通过Linus本人手动整合代码,Linus本人是Subversion和Concurrent Version System的反对者,因为集中式的版本控制系统访问速度慢,效率低,当时市场上也存在分布式版本控制系统,但都是商用版,与Linux开源精神背道而驰;
一个偶然的机会,商业版本控制系统BitKeeper的初始公司BitMover授权Linux社区免费使用该版本控制系统,但仅仅到2005年,BitMover就要收回使用权,Linus紧急情况下,基于C语言自己写了一个分布式版本控制系统,这个系统就是Git,不到一个月,Linux的源码就迁移到了Git;
2008年,Github网站上线,github为开源项目免费提供git管理和存储,开源逐渐成为大势所趋,2016年BitKeeper也转型开源,至今,众所周知,github已经成为全球最大的男性社交网站
git的使用
1.git初识
首先在机器上安装git:
sudo apt install git
新建一个项目,并用git初始化项目,使项目具有版本控制属性:
mkdir project
cd project
git init
在project下新建文件,可以用add的方式添加到版本库里:
vi main.c
#使用vi对main.c进行编辑
git add main.c
通过git status可以查看版本库的状态,注意main.c只是添加到库中,还未提交,状态如下:
如果再新建一个文件hello.c,但不添加到版本库,查看状态会出现以下结果:
2.结合github
上面所说的版本库属于本地的版本控制系统,github则是远端的版本库,一般个人用户在github上创建项目,再git clone到本地的版本库,修改完成后再提交到远端服务器上;
首先,在github上新建库:new repository,其中,在初始化选项中,readme.md文件用于说明项目,gitignore指明哪些文件不会纳入到版本控制中(比如只让源码进入版本控制,源码生成的结果文件不纳入版本控制,即不开源),license则是该版本库选择的协议(有GPL等);
新建好项目后,会得到一个URL,用户在本地借助:
git clone URL
将项目克隆到本地
下面是用于后续提交等操作的常用命令:
git add [files] 将文件添加到版本库,若用 git add . 代表将当前目录下所有文件纳入
git commit -m "the log" 将文件提交到仓库
git log 查看提交记录,即版本库的修改记录
git status 查看提交状态
git diff [files] 查找前后文件的差异
git reset --hard HEAD^ 回滚到上一版本
git pull 将最新版本拉回到本地
git push 推送最新版本到github
在commit前需要指明本地的身份:
git config --global user.email "xxxxx.com"
git push前需要提供github账号,用以明确身份
push完成后,远端版本库将会新增文件,并有修改记录:
3.commit和push
commit和push体现了git的分布式管理,git可以管理本地仓库,和远程仓库:
commit用于将本地修改的文件提交到本地库;
push将本地仓库的最新信息推送到远程库;
commit与push分开的好处是,避免由于网络原因导致提交到服务器的文件丢失,是否push到服务器完全由用户选择