三更灯火五更鸡: 编辑文件
vim [OPTION] [FILE]
:Vi IMproved
的缩写,vi = VIsual = Very Inconvenient
是命令行编辑工具,vim
即vi
的增强版,编辑文件.
先设定整体目标,做好全局性计划,然后再是根据目标确定详细具体的工作安排。
# 在命令行编辑器中编辑 goal.txt 文件,如果没有会自动创建. $ vim goal.txt
进入编辑器后的基本命令
i
:insert
的缩写,翻译为”插入”,即切换到编辑模式.esc
:escape
的缩写,翻译为”逃跑”,即切换到命令模式.:w
:write
的缩写,翻译为”保存”,即保存文件内容.:q
:quit
的缩写,翻译为”退出”,即退出vim
编辑器.:wq
:write and quit
的缩写,翻译为”保存并退出”,即保存并退出vim
编辑器.:q!
:quit force
的缩写,翻译为”强制退出”,即不提示未保存强制退出.gg
: 定位到文件开头.G
: 定位到文件结尾.yy
: 复制整行.dd
: 剪切整行.p
: 粘贴.u
: 撤销.ctrl + f
: 下翻整页.ctrl + b
: 上翻整页.ctrl + d
: 下翻半页.ctrl + u
: 上翻半页./<string>
: 查找
字符串
编辑后的目标,学习 markdown
,学习 git
,学习gitbook
,分享 java
知识等等,目标远大,挽起袖子加油干吧!
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ cat goal.txt ## learning markdown ## learning git ## learning gitbook ## sharing java8
挽起袖子加油干: 查看开头
head [OPTION] [FILE]
:head
翻译为”头”,即打印文件前十行内容.
我们立下的目标暂时只有四行,为了掩饰效果,临时录入更多无意义的计划,这部分并不属于我们的目标。
echo "万丈高楼平地起: 创建目录" >> goal.txt echo "飘洋过海来看你: 切换目录" >> goal.txt echo "惊鸿一瞥初相见: 打印目录" >> goal.txt echo "回头四顾心茫然: 列出文件" >> goal.txt echo "保温杯中泡枸杞: 创建文件" >> goal.txt echo "枸杞茶中加枸杞: 覆盖输入" >> goal.txt echo "枸杞茶中倒热水: 追加输入" >> goal.txt echo "枸杞茶要慢慢品: 查看文件" >> goal.txt
现在 goal.txt
文件不止十行,而是十六行数据,足够我们演示效果。
在泡枸杞茶最后一步中,我们需要品茶以此确定枸杞和热水搭配是否合理,使用 cat
命令帮我们查看文件全部内容,如果我们不需要查看全部,只需要查看前十条的话,就需要另外的命令。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ cat goal.txt ## learning markdown ## learning git ## learning gitbook ## sharing java8 万丈高楼平地起: 创建目录 飘洋过海来看你: 切换目录 惊鸿一瞥初相见: 打印目录 回头四顾心茫然: 列出文件 保温杯中泡枸杞: 创建文件 枸杞茶中加枸杞: 覆盖输入 枸杞茶中倒热水: 追加输入 枸杞茶要慢慢品: 查看文件
查看目标清单中的前十条记录,而不显示全部记录。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ head goal.txt ## learning markdown ## learning git ## learning gitbook ## sharing java8 万丈高楼平地起: 创建目录 飘洋过海来看你: 切换目录
不思进取后十名: 查看结尾
tail [OPTION] [FILE]
:tail
翻译为”尾”,即打印文件后十行内容.
如果查看文件是目标文件 goal.txt
还好,目标再小也不应被歧视,如果是成绩文件或者绩效文件,难免会被比较,打上”不思进取”的标签。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ tail goal.txt ## sharing java8 万丈高楼平地起: 创建目录 飘洋过海来看你: 切换目录 惊鸿一瞥初相见: 打印目录 回头四顾心茫然: 列出文件 保温杯中泡枸杞: 创建文件 枸杞茶中加枸杞: 覆盖输入 枸杞茶中倒热水: 追加输入 枸杞茶要慢慢品: 查看文件
优雅的写作体验: markdown
markdown
是一种轻量型的文本标记语言,是无文本txt
的增强版,是超文本html
的精简版,是二进制word
的替代版,带给你全新的写作体验.
刚刚立下的目标文件的第一条就是学习 markdown
,那什么是 mardown
以及我们为什么要学习 markdown
呢?
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo # 前一条记录: -n 1,前五条记录: -n 5 $ head -n 1 goal.txt ## learning markdown
如果你的文章需要手动同步发表到各大网络平台,用书写 word
那种体验虽然直观,但是缺点是需要记住各平台布局按钮摆放位置,想要达到一致的输出效果,每个平台都需要手动调整以确保最终效果一致性。
如果使用 markdown
体验来书写文字则完全不会有这种问题,提前定义好的文件格式并不依赖平台,你可以一处编写,随心所欲到处复制粘贴!
既然 markdown
这么神奇,这种优雅的写作方式到底是什么呢?学起来真的一点都不费事!
markdown
是一种标记语言,常用于书写文章,小巧轻量,不必记住令人眼花缭乱的按钮摆放位置,也不像记事本那种毫无格式,只需记住有限几个特殊字符就能输出漂亮美观的文件效果!
比如当前文章的书写格式就是 markdown
进行编写,整体效果还不错,这样看起来 markdown
是不是很强大呢!
和其他文本文档一样,
markdown
文件也有自己的后缀名.md
,比如该文章的文件名git-bash-command.md
.
现在你是不是迫不及待想要学习 markdown
了呢?
别急,学习需要规划,我们再专门新建目录用于存放 markdown
学习笔记。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo # 创建目录: 参考"万丈高楼平地起"章节 $ mkdir markdown snowdreams1006@home MINGW64 /g/workpace/git-bash-demo # 列出文件: 参考"回头四顾心茫然"章节 $ ls cup.txt goal.txt markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo # 切换目录: 参考"飘洋过海来看你"章节 $ cd markdown snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown # 打印目录: 参考"惊鸿一瞥初相见"章节 $ pwd /g/workpace/git-bash-demo/markdown
现在让我们先学习下 markdown
中标题和列表如何书写,想要了解更多请参考我专门介绍 makdown
的系列文章。
- 标题
语法格式:
#
+空格
+文本
,#
表示一级标题,##
表示二级标题,###
表示三级标题,以此类推,最多支持六级标题.
示例:
# 标题1 ## 标题2
- 有序列表
语法格式:
数字
+.
+空格
+文本
示例:
1. 有序列表1 2. 有序列表2 3. 有序列表3
- 无序列表
语法格式:’
- 或 * 或 +
‘ +空格
+文本
示例:
- 无序列表1 * 无序列表2 + 无序列表3
哇塞,原来 markdown
语言竟然如何简洁,妈妈再也不用担心我记不住复杂的布局按钮了!
笔记时间到,赶紧将上述知识点整理到 markdown
目录下,创建 markdown.md
文件用于记录刚才的学习笔记。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown # 编辑文件: 参考"三更灯火五更鸡"章节 $ vim markdown.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown # 查看文件: 参考"枸杞茶要慢慢品"章节 $ cat markdown.md 先学习下 `markdown` 中标题和列表如何书写,想要了解更多请参考我专门介绍 `makdown` 的[系列文章](https://snowdreams1006.github.io/markdown/). ...
恪尽职责的网盘: git
经过上述内容引导发现 markdown
语法确实在某些场景下很好用,于是乎下定决心开始踏上学习 markdown
之旅。
工欲善其事必先利其器,本着小白初体验心态,还是先安装一个可视化的编辑器吧!
实际上,
markdown
很常用,主流编辑器基本都有相应插件,比如idea
,vs code
和sublime
等.
typora
编辑器,支持多平台,,windows
,mac
和 linux
,别具一格的首页。
安装没有特殊的注意事项,正常安装就可以了,安装完毕后可以选择打开已有 markdown
文件。
实时渲染,所见即所得,左侧是文件列表,右侧是内容编辑器,喜欢的话赶紧入手吧!
装备好编辑器后,我们接着继续学习 markdown
的基本知识,介绍下如何显示图片以及超链接。
- 链接
语法格式:
[显示文本]
+(链接地址)
示例:
1. [https://snowdreams1006.github.io](https://snowdreams1006.github.io/)
语法格式:
!
+[图片标题]
+(图片地址)
示例:
![雪之梦技术驿站的头像](https://upload.jianshu.io/users/upload_avatars/16648241/57aebe62-b5b5-491a-a9fd-f994d5be7dda.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)
点滴积累也是进步,记得要把这次的学习笔记保存到我们之前的 markdown.md
文件中哟!
正所谓”温故而知新可以为师矣”,笔记不仅要写还要经常看,于是在刚刚的笔记上做些修改添加自己的理解。
果然是一次愉快的学习体验,真的是活学活用啊,孺子可教也!
隔壁小伙伴听说你最近在学 markdown
,想借你老师留下的笔记看看,于是你好心找一下课堂笔记打算发给他.
等一等,对方需要的是课件资料并不包含你自己理解那部分笔记哟,怎么办?
那就以当前笔记为基础再复制一份笔记,然后删掉自己理解的那部分笔记呗!
- 请给我拷贝课件: 复制文件
cp [OPTION] [-T] SOURCE DEST
:copy
的缩写,即复制文件.
既然对方明确要求课件而不是自己的笔记,那把自己的那部分内容手动清除掉呗!
整理好课件后发给了小伙伴,虽然辛苦点但是帮助别人快乐自己,谁让我们一直接受的教育就是助人为乐呢?
经过一阵子的学习了解到更多 markdown
知识,于是课件加上自己的笔记越来越多,小白已经渐渐远去,大神正在向我们招手…
- 省心尽责的网盘: 版本控制系统
上次帮助了隔壁的小伙伴,一传十十传百,又有其他小伙伴求课件了,听说认真好学的你还做了笔记,也有人要笔记,事情有点复杂啊。
有的人需要课件,有的人需要笔记,已领取资料的人还想要后续更新能及时通知到他们?
如果仍然采用复制粘贴修改的方式,可想而知是多么麻烦,源文件复制一份给张三,再复制一份给李四并且还要去掉自己笔记部分,给王二的文件比较老还有再弄一份新的给他…
如果不考虑文件的差异性需求,可以将文件上传到网盘中再分享给需要的小伙伴,明显这种网盘并不能解决目前问题。
因为网盘的文件是源文件的最新备份,不能满足文件差异性的需求也无法管理文件历史状态。
万一哪次整理课件时需要删除笔记部分时,一不小心忘记备份源文件,课堂笔记就这么丢失了很难再找回来了!
所以,如果有这么一种工具能够事无巨细帮我们记录文件状态,还能有网盘管理并分享的功能就能解决我们的痛点了,这样恪尽职责的网盘谁能不喜欢?
事实上,这种工具确实存在而且不仅一种!
专业术语叫做版本控制系统,其中分为集中式版本控制系统和分布式控制系统,区别在于鸡蛋是否在一个篮子中。
如果鸡蛋都在一个篮子中,母鸡无论在何处下蛋,鸡蛋最终都会被收集都一个篮子中,想要吃鸡蛋时再去这个篮子里拿,这就叫做集中式版本控制系统。
如果鸡蛋不在同一个篮子中,母鸡下的鸡蛋被收集到附近的篮子中,需要吃鸡蛋时再从最近的篮子中去拿,这种情况就叫做分布式版本控制系统。
集中式的特点在于集中管理统一调度,而分布式的特点在于分开管理灵活高效,实际情况中选择哪一个需要具体情况具体分析。
当然,我们现在讲解的只是其中之一,那就是分布式版本控制系统。
- 千呼万唤始出来:
git
说到分布式版本控制系统,不得不提的就是 git
— 最先进最流行的分布式版本控制系统。
git
是分布式版本控制系统家族的璀璨明星,免费开源,支持 windows
,mac
以及 linux
等平台。
下面以 windows
电脑为例,介绍下 git
的安装和使用。
官网下载地址: https://git-scm.com/download/win
正常的话,按照默认选择安装即可,请确保 Git Bash Here
前面的复选框已勾选,否则无法提供命令行终端。
接下来一切按照默认选项安装,安装模拟终端类型时请选择第一种 Mintty
以保证环境一致性。
安装成功后桌面或者右键会出现 Git Bash
图标或选项,打开终端,输入 git --version
如果能正常输出版本信息,那就说明安装成功了!
现在我们又不经意间学习了 git
,这不刚好是我们的第二个目标?
纳尼,你说目标是啥?竟然忘记了最初的目标。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown $ ls courseware.md markdown.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/markdown $ cd ../ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ ls cup.txt goal.txt markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ head goal.txt ## learning markdown ## learning git ## learning gitbook ## sharing java8 万丈高楼平地起: 创建目录 飘洋过海来看你: 切换目录
关于学习 markdown
的目标已经完成,学以致用不如动手改造下目标文件 goal.txt
重命名 goal.md
。
- 改头换面化个妆: 移动文件
mv [OPTION] [-T] SOURCE DEST
:move file
的缩写,即移动文件.
正常来说换工作一般会工作地点,当然升职这种换工作但工作地点可能并没有改变,反映到计算机世界中,移动文件本是更改工作目录,如果工作目录没有改变,只是修改个后缀名也未尝不可。
$ ls cup.txt goal.txt markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ mv goal.txt goal.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ ls cup.txt goal.md markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ cat goal.md ## learning markdown ## learning git ## learning gitbook ## sharing java8 万丈高楼平地起: 创建目录 飘洋过海来看你: 切换目录 惊鸿一瞥初相见: 打印目录 回头四顾心茫然: 列出文件 保温杯中泡枸杞: 创建文件 枸杞茶中加枸杞: 覆盖输入 枸杞茶中倒热水: 追加输入 枸杞茶要慢慢品: 查看文件
- 版本控制我来了: 初始化
git init
: 即初始化本地项目.
如何将文件放到网盘管理,正如如何将鸡蛋放到篮子中,首先要有篮子,这里我们将 git-bash-demo
父目录充当我们的篮子。
正式使用 git
打造本地网盘前,我们还需要设置下用户名和邮箱,这一步相当于自报家门,这样 git
才知道现在是谁在用。
还记得我是谁吗?
whoami
就是你在计算机中的用户名。这里的git
用户名可以使自定义的用户名.
$ git config --global user.name "your username" $ git config --global user.email "example@example.com"
现在运行 git init
命令,开始打造本地网盘,开启版本控制之旅!
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ pwd /g/workpace/git-bash-demo snowdreams1006@home MINGW64 /g/workpace/git-bash-demo $ git init Initialized empty Git repository in G:/workpace/git-bash-demo/.git/
好记性不如烂笔头,像我们学习 markdown
那样,我们也创建专门的目录用于存放 git
笔记。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master) $ ls cup.txt goal.md markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master) $ mkdir git snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master) $ ls cup.txt git/ goal.md markdown/ snowdreams1006@home MINGW64 /g/workpace/git-bash-demo (master) $ cd git snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ ls snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ touch git.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ ls git.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ echo "first step : git init" > git.md snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ cat git.md first step : git init
- 知己知彼看状态: 查看状态
git status
: 即查看文件状态
正所谓”知己知彼方能百战不殆”,随时了解文件状态才能做到心中有数。从而更好地进行版本管理、
所谓”版本”,可以理解为现实世界中的不同时空那一刻的”状态”,文件的版本则是记录了文件的历史状态。
git status
命令告诉我们文件状态以及能够智能猜预测我们下一步操作,好比身边的小秘书一样。
snowdreams1006@home MINGW64 /g/workpace/git-bash-demo/git (master) $ git status # 在 `master` 分支上,暂时不用理解分支概念,默认处于该分支 On branch master # 目前还没有提交,`commit` 翻译"提交",即"版本",表示文件的不同历史时刻下的当时的状态 No commits yet # 未被追踪的文件: 好比文件上传到网盘一样,`git init` 创建本地网盘,但还没添加文件到网盘中. Untracked files: # (使用 `git add <file>` 来包含将要被添加的文件: 智能预测提示我们下一步应该添加下述文件) (use "git add <file>..." to include in what will be committed) ../.swp ../cup.txt ./ ../goal.md ../markdown/ # 没有已添加文件需要提交,但是目前有未被追踪文件(使用 `git add` 去追踪文件变化): 再次提示我们运行 `git add` 命令追踪文件. nothing added to commit but untracked files present (use "git add" to track)
- 整装待命入队列: 添加文件
git add <file>
: 即添加文件,表示跟踪文件变化,即将加入版本控制系统.
如果将文件上传到网盘中,首先需要确定好需要上传的文件列表,然后才是上传文件的具体操作。
git add <file>
做的就是挑选出需要上传文件的清单列表,追踪到这些文件的变化以便下一步一次性全部上传!
$ git add ../cup.txt ./ ../goal.md ../markdown/ warning: LF will be replaced by CRLF in cup.txt. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in git/git.md. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in goal.md. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in markdown/courseware.md. The file will have its original line endings in your working directory warning: LF will be replaced by CRLF in markdown/markdown.md. The file will have its original line endings in your working directory