高级软件工程课程总结

工欲善其事 必先利其器

Visual Studio Code

常用快捷键

  • 打开文件夹( Ctrl/⌘+O)和关闭文件夹工作区( Ctrl/⌘+K F)

  • 新建文件(Ctrl/⌘+N)、关闭文件(Ctrl/⌘+W)、编辑文件和保存文件(Ctrl/⌘+S)

  • 文件内搜索(Ctrl/⌘+F)

  • 关闭所有文件(Ctrl/⌘+K W)

  • 关闭已保存的文件(Ctrl/⌘+K U)

  • Ctrl+/用于单行代码注释和取消注释,Ctrl+Shift+A用于代码块注释和取消注释。

特性

  • 专注于开发者“最常用”的功能

  • 进程隔离的插件模型

  • UI渲染与业务逻辑隔离,一致的用户体验

  • 代码理解和调试——LSP和DAP两大协议

    (Language Server Protocol)

    1、节制的设计

    2、合理的抽象

    3、周全的细节

    (Debug Adapter Protocol)
  • 集大成的 Remote Development

    VSCRD VScode远程开发

Git

常用命令

  • git init 创建版本库

  • git clone 在本地克隆远端的版本库

  • git log 查看提交记录

  • git add 将文件添加到暂存区以便于commit

  • git commit 提交版本

  • git push 将本地仓库更新到远程仓库

  • git pull 获取远程仓库以更新本地仓库

  • git merge 合并两个以上的开发历史记录

  • git checkout 切换分支

  • git rebase 整理提交记录(还需要再看)

  • git status 查看当前工作区的状态

  • git reset – hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 回退

  • git reflog 可以查看当前HEAD之后的提交记录,便于回到未来

  • git reset – hard commit-id/commit-id

  • git fetch 下载一个远程存储库数据对象等信息到本地存储库

Git

1、git本地版本库的基本用法

  • git init # 初始化一个本地版本库

  • git status # 查看当前工作区(workspace)的状态

  • git add [FILES] # 把文件添加到暂存区(Index)

  • git commit -m "wrote a commit log infro” # 把暂存区里的文件提交到仓库

  • git log # 查看当前HEAD之前的提交记录,便于回到过去

  • git reset —hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退

  • git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来

  • git reset —hard commit-id/commit-id的头几个字符 # 回退

要是在本地对源代码进行基本的版本控制,主要通过git add和git commit -m提交版本,有了提交记录之后可以灵活地将当前工作区里的源代码回退到过去的某个版本,也就是回到过去。回到过去之后,也有可能发现之前撤销的某个版本是有价值的,希望找回来,这就需要回到未来。过去和未来之间的分界点就是HEAD,即当前工作区所依赖的版本。

2、git远程版本库的基本用法

  • git clone命令官方的解释是“Clone a repository into a new directory”,即克隆一个存储库到一个新的目录下。

  • git fetch命令官方的解释是“Download objects and refs from another repository”,即下载一个远程存储库数据对象等信息到本地存储库。

  • git push命令官方的解释是“Update remote refs along with associated objects”,即将本地存储库的相关数据对象更新到远程存储库。

  • git merge命令官方的解释是“Join two or more development histories together”,即合并两个或多个开发历史记录。

  • git pull命令官方的解释是“Fetch from and integrate with another repository or a local branch”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。

git的设计理念和时间线

  • line diff是形成增量补丁的技术方法,即一个文件按行对比(line diff)将差异的部分制作成一个增量补丁。

  • commit是存储到仓库里的一个版本,是整个项目范围内的一个或多个文件的增量补丁合并起来,形成项目的增量补丁,是一次提交记录。每个提交(commit)都生成一个唯一的commit ID。

  • branch是按时间线依次排列的一组提交记录(commit),理论上可以通过当前branch上最初的提交(commit)依次打补丁直到HEAD得到当前工作区里的源代码。

  • tag标签就是某次提交(commit)的commit ID的别名

3、团队的分叉与合并

建议团队项目的每一个开发者都采用的工作流程大致如下: 1 克隆或同步最新的代码到本地存储库; 2 为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制; 3 在该分支上完成某单一功能模块或代码模块的开发工作; 4 最后,将该分支合并到主分支。

合并方法

默认的合并方式为"快进式合并"(fast-farward merge),会将分支里commit合并到主分支里,合并成一条时间线,与我们期望的呈现为一段独立的分支线段不符,因此合并时需要使用–no-ff参数关闭"快进式合并"(fast-farward merge)。

一、克隆或同步最新的代码到本地存储库
  1. git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git

  2. git pull

二、为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
  1. git checkout -b mybranch

  2. git branch

三、在该分支上完成某单一功能模块或代码模块的开发工作;多次进行如下操作:
  1. git add FILES

  2. git commit -m “commit log”

四、最后,先切换回master分支,将远程origin/master同步最新到本地存储库,再合并mybranch到master分支,推送到远程origin/master之后即完成了一项开发工作。
  1. git checkout master

  2. git pull

  3. git merge --no-ff mybranch

  4. git push

4、Git Rebase

一般我们在软件开发的流程中,有一个朴素的版本管理哲学:开发者的提交要尽量干净、简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能点,而且要在对应的 commit log message 里面描述清楚。因此在合并和 push 之前检查修改一下 commit 记录时常需要。

团队项目工作流程中增加一步Git Rebase,即在mybranch分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录。注意不要通过rebase对任何已经提交到远程仓库中的commit进行修改。

git rebase命令格式大致如下:
  • git rebase -i [startpoint] [endpoint] 其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支的HEAD。 一般只指定[startpoint] ,即指定从某一个commit节点开始,可以使用HEAD^^、HEAD~100、commit ID或者commit ID的头几个字符来指定一个commit节点,比如下面的代码指定重新整理HEAD之前的三个commit节点。

  • $ git rebase -i HEAD^^^

  • git rebase —abort

  • git rebase --continue

5、Fork + Pull request

为了解决开源社区松散团队的协作问题,Github提供了Fork+ Pull request的协作开发工作流程。

当你想更正别人仓库里的Bug或者向别人仓库里贡献代码时,要走Fork+ Pull request的协作开发工作流程: 1 先 fork(分叉) 别人的仓库,相当于拷贝一份; 2 做一些 bug fix或其他的代码贡献; 3 发起 Pull request 给原仓库; 4 原仓库的所有者 review Pull request,如果没有问题的话,就会 merge Pull request 到原仓库中。

Vim

三种模式

  • 命令模式

  • 输入模式

  • 底线命令模式 :q退出程序 :w保存文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nEQnzGJW-1657457016152)(image/image_iiLz0_23Ng.png)]

常用命令

  • hjkl 左下上右

  • 0或Home 移动到本行第一个字符

  • $或End 移动到本行最后一个字符

  • gg 移动到第一行

  • G 移动到最后一行 = 1G

  • n+Enter 向下移动n行

  • x del向后删除一个字符

  • X backspace向前删除一个字符

  • dd 删除一行

  • ndd 删除光标之后n行

  • yy 复制一行

  • nyy 复制光标之后n行

  • p 在当前行之后粘贴

  • P 在当前行之前粘贴

  • u 撤销

  • ctrl+r 重做

  • /word 在光标之后查找word字符串

  • n1,n2s/word1/word2/g 在第n1行与n2行之间将word1替换为word2

  • n1,$s/word1/word2/g 在第n1行之后将word1替换为word2

  • n1,$s/word1/word2/gc 在第n1行之后将word1替换为word2并且替换前需要确认

  • i 从光标处开始输入

  • I 从所在行的第一个非空格字符开始输入

  • a 从光标的下一个字符开始输入

  • A 从所在行的最后一个字符开始输入

  • o 从光标的下一行输入新的一行

  • O 从光标的上一行输入新的一行

  • r 取代模式,只取代光标处字符一次

  • R 一直取代字符(覆写)

  • :q 退出

  • :q! 强制退出

  • :w 将修改写入文件

  • :wq 保存退出

  • :wq! 强制保存退出

1、安装Vim

It is included as “vi” with most UNIX systems and with Apple OS X. 使用VSCode则可以在Linux、Windows和OS X上都能使用Vim 在VSCode中Ctrl/⌘+Shift+X管理扩展插件中搜索vim即可安装使用

  • 命令模式(Command mode),用户刚刚启动vi/vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令

  • 输入模式(Insert mode),在命令模式下按下i就进入了输入模式,按ESC退出输入模式,切换到命令模式。

  • 底线命令模式(Last line mode),在命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。基本的命令有q(退出程序)、w(保存文件)等。按ESC键可随时退出底线命令模式。

2、三种模式之间的切换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eFvnSAb-1657457016153)(image/image_RwyBltzW_9.png)]

3、移动光标的基本方法

  • h 或 向左箭头键(←) 光标向左移动一个字符

  • j 或 向下箭头键(↓) 光标向下移动一个字符

  • k 或 向上箭头键(↑) 光标向上移动一个字符

  • l 或 向右箭头键(→) 光标向右移动一个字符

  • 如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!

4、移动光标的更多方法

  • n<space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。

  • 0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)

  • $ 或功能键[End] 移动到这一行的最后面字符处(常用)

  • H 光标移动到这个屏幕的最上方那一行的第一个字符

  • M 光标移动到这个屏幕的中央那一行的第一个字符

  • L 光标移动到这个屏幕的最下方那一行的第一个字符

  • G 移动到这个档案的最后一行(常用)

  • nG n为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行

  • gg 移动到这个档案的第一行,相当于 1G 啊! (常用)

  • n<Enter> n 为数字。光标向下移动 n 行(常用)

5、删除

  • x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)

  • nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。

  • dd 删除游标所在的那一整行(常用)

  • ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)

  • d1G 删除光标所在到第一行的所有数据

  • dG 删除光标所在到最后一行的所有数据

  • d$ 删除游标所在处,到该行的最后一个字符

  • d0 那个是数字的0 ,删除游标所在处,到该行的最前面一个字符

6、复制与粘贴

  • yy 复制游标所在的那一行(常用)

  • p, P p为将已复制的数据在光标下一行贴上,P则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)

  • nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)

  • y1G 复制游标所在行到第一行的所有数据

  • yG 复制游标所在行到最后一行的所有数据

  • y0 复制光标所在的那个字符到该行行首的所有数据

  • y$ 复制光标所在的那个字符到该行行尾的所有数据

7、复原和重做

  • u 复原前一个动作。(常用)

  • [Ctrl]+r 重做上一个动作。(常用) 这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次

8、自动化执行宏命令

  • J 将光标所在行与下一行的数据结合成同一行,2Jj则把下面的2行合并为一行并将光标下移一行

  • 在normal mode下q[a-z]开始录制宏命令,再次按q结束宏命令定义。

  • qa2Jjq,q-开始录制宏;a-宏的编号是a,最后一个q-结束宏定义

  • 3@a,执行三次a宏

9、基本搜索

  • /word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)

  • ?word 向光标之上寻找一个字符串名称为 word 的字符串。 n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!

10、基本搜索替换

  • :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用)

  • s是substitute的简写,表示执行替换字符串操作

  • g(global)表示全局替换;c(comfirm)表示操作时需要确认;i(ignorecase)表示不区分大小写

  • :1, s / w o r d 1 / w o r d 2 / g 或 : s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) :1, s/word1/word2/g

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值