【toos】工具篇

1 通用的makefile

编写一个makefile,可以将其所在目录下的所有独立 .c 文件编译生成同名可执行文件。

src = $(wildcard *.c)                    # 拿到所有*.c
target  = $(patsubst %.c, %, $(src))     # 将src中所有%.c替换成%
 
ALL:$(target)
 
%:%.c
        gcc $< -o $@
 
clean:
        -rm -rf $(target)
 
.PHONY:clean ALL

一个包含多个.cpp、.h和main.cpp的makefile,,其中.cpp在src路径下,.h在include路径下,main.cpp在当前路径下。

# 定义编译器
CXX = g++

# 定义编译选项
CXXFLAGS = -Wall -g -Iinclude

# 定义目标可执行文件
TARGET = main

# 定义源文件和目标文件
SRCS = $(wildcard src/*.cpp) main.cpp
OBJS = $(SRCS:.cpp=.o)

# 默认目标
all: $(TARGET)

# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)

# 生成目标文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理生成的文件
clean:
	rm -f $(OBJS) $(TARGET)

# 伪目标,不生成文件
.PHONY: all clean

2 git相关

git init
git add .
git commit -m "first commit"
git remote add origin 仓库地址
git push -u origin master
git push -f origin master      # 强制

git diff HEAD -- readme.txt        # 查看工作区和版本库里面最新版本的区别
git checkout -- readme.txt         # 丢弃工作区的修改,就是让这个文件回到最近一次git commit或git add时的状态
git reset HEAD readme.txt          # 把暂存区的修改撤销掉(unstage),重新放回工作区
git rm test.txt
git checkout -- test.txt
git diff readme.txt

git log
git log --pretty=oneline

git reset --hard HEAD^
git reset --hard 1094a        # 指定版本
git reflog                    # 记录你的每一次命令

git checkout -b dev           # 创建dev分支,然后切换到dev分支
git branch dev
git checkout dev

git branch                    # 查看当前分支
git switch master             # 切换回master分支
git merge dev                 # 把dev分支的工作成果合并到master分支上

git branch -d dev             # 删除dev分支
git switch -c dev             # 创建并切换到新的dev分支


git stash                     # 把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list                # 查看刚才的工作现场存

# 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
git stash apply stash@{0}
git stash pop                 # 另一种方式是用git stash pop,恢复的同时把stash内容也删了

# feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数
git branch -D feature-vulcan

git remote                    # 查看远程库的信息
git remote -v


# 把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了
git rebase

git push origin HEAD:refs/for/master
git push origin HEAD:refs/for/master%draft

git commit -a --amend --no-edit
git submodule update --init --recursive

因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

3 linux下vim自动在c文件插入文件头

打开vim配置

vim ~/.vimrc 

插入以下代码

set nu
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
"""定义函数SetTitle,自动插入文件头
func SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1,"\#########################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: Winter")
call append(line(".")+2, "\#Created Time:".strftime("%c"))
call append(line(".")+3, "\#########################################################################")
call append(line(".")+4,"\#!/bin/bash")
call append(line(".")+5,"")
else
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: Winter")
call append(line(".")+2, " > Created Time: ".strftime("%c"))
call append(line(".")+3, " ************************************************************************/")
call append(line(".")+4, "")
endif
if &filetype == 'cpp'
call append(line(".")+5, "#include<iostream>")
call append(line(".")+6, "using namespace std;")
call append(line(".")+7, "")
call append(line(".")+8, "int main(int argc, char* argv[])")
call append(line(".")+9, "{")
call append(line(".")+10, "")
call append(line(".")+11, "     return 0;")
call append(line(".")+12, "}")
call append(line(".")+13, "")
endif
if &filetype == 'c'
call append(line(".")+5, "#include<stdio.h>")
call append(line(".")+6, "#include<stdlib.h>")
call append(line(".")+7, "#include<string.h>")
call append(line(".")+8, "#include<unistd.h>")
call append(line(".")+9, "#include<pthread.h>")
call append(line(".")+10, "")
call append(line(".")+11, "int main(int argc, char* argv[])")
call append(line(".")+12, "{")
call append(line(".")+13, "")
call append(line(".")+14, "     return 0;")
call append(line(".")+15, "}")
endif
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc

4 linux下多窗口终端

sudo apt install terminator

快捷方式1

Alt+Up                          //移动到上面的终端
Alt+Down                        //移动到下面的终端
Alt+Left                        //移动到左边的终端
Alt+Right                       //移动到右边的终端
Ctrl+Shift+O                    //水平分割终端
Ctrl+Shift+E                    //垂直分割终端
Ctrl+Shift+Right                //在垂直分割的终端中将分割条向右移动
Ctrl+Shift+Left                 //在垂直分割的终端中将分割条向左移动
Ctrl+Shift+Up                   //在水平分割的终端中将分割条向上移动
Ctrl+Shift+Down                 //在水平分割的终端中将分割条向下移动
Ctrl+Shift+S                    //隐藏/显示滚动条
Ctrl+Shift+F                    //搜索
Ctrl+Shift+C                    //复制选中的内容到剪贴板
Ctrl+Shift+V                    //粘贴剪贴板的内容到此处
Ctrl+Shift+W                    //关闭当前终端
Ctrl+Shift+Q                    //退出当前窗口,当前窗口的所有终端都将被关闭
Ctrl+Shift+X                    //最大化显示当前终端
Ctrl+Shift+Z                    //最大化显示当前终端并使字体放大
Ctrl+Shift+N or Ctrl+Tab        //移动到下一个终端
Ctrl+Shift+P or Ctrl+Shift+Tab  //Crtl+Shift+Tab 移动到之前的一个终端

快捷方式2

F11                             //全屏开关
Ctrl+Shift+T                    //打开一个新的标签
Ctrl+PageDown                   //移动到下一个标签
Ctrl+PageUp                     //移动到上一个标签
Ctrl+Shift+PageDown             //将当前标签与其后一个标签交换位置
Ctrl+Shift+PageUp               //将当前标签与其前一个标签交换位置
Ctrl+Plus (+)                   //增大字体
Ctrl+Minus (-)                  //减小字体
Ctrl+Zero (0)                   //恢复字体到原始大小
Ctrl+Shift+R                    //重置终端状态
Ctrl+Shift+G                    //重置终端状态并clear屏幕
Super+g                         //绑定所有的终端,以便向一个输入能够输入到所有的终端
Super+Shift+G                   //解除绑定
Super+t                         //绑定当前标签的所有终端,向一个终端输入的内容会自动输入到其他终端
Super+Shift+T                   //解除绑定
Ctrl+Shift+I                    //打开一个窗口,新窗口与原来的窗口使用同一个进程
Super+i                         //打开一个新窗口,新窗口与原来的窗口使用不同的进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值