Qeuroal's Blog

静幽正治

  1. 新建 shadowsocks.desktop

  2. 将以下内容根据自己的情况更改,复制到 shadowsocks.desktop 内:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Shadowsocks
    Comment=Connection Manager — Shadowsocks-Qt5
    Exec=/home/gph/shadowsocks_ubuntu/Shadowsocks-Qt5-3.0.1-x86_64.AppImage // AppImage程序路径
    Icon=/home/gph/shadowsocks_ubuntu/shadowsocks.png // 小飞机的图标
    Terminal=false
    StartupNotify=true
    Categories=Application
  3. 即创建快捷方式

Note: 如果没有创建快捷方式,好像应该不能开机自启。

PE

微PE工具箱

步骤

  1. 使用U盘启动快捷项,启动PE
  2. 在分区大师工具看下自己ESP在哪个盘符,就在UEFI引导修复里面选择哪个盘符。
    ./105/10.png)
  3. 开UEFI引导修复,在ESP里面选择H盘符(若没有则点击 挂载
    ./105/11.png)
  4. 选择根目录:windows目录(例:C:\Windows
  5. 点击开始修复,点击确定
  6. 最后重新开机,就可以进入系统了

准备工作

步骤

  1. 右击系统镜像 - 挂载

  2. 将下载的WTG解压出来,然后运行

  3. 按照下图进行设置

    • 点击 浏览... ,选择挂载的 系统镜像的目录 -> sources -> install.wim
    • 选择安装的系统的U盘,即 浏览... 下面一栏(左面第二栏)
    • 再下面一栏(左面第三栏),选择要安装系统的版本(推荐:专业版或企业版)
    • 高级选项(右面)- 常用:选择: UEFI+MBR,其他的根据自己的需求来选择
  4. 然后,使用U盘快捷启动进入系统就可以了

[!NOTE]
如果原来系统的打不开了,即引导出了问题,见下一篇文章(UEFI引导修复)

tmux 操作

进入tmux翻屏模式

  • 先按 Ctrl+q,松开,然后再按 [
  • 实现上下翻页: 进入翻屏模式后,PgUp, PgDn 实现上下翻页
  • 退出: q

ps: ctrl + b + [,很多人会以为是同时按三个键,但是这样是不行的。

简单介绍下tmux的其他功能

常用快捷键

Tmux快捷指令

关于快捷指令,首先要认识到的是:tmux的所有指令,都包含同一个前缀,默认为Ctrl+q,输入完前缀过后,控制台激活,命令按键才能生效。前面tmux会话相关的操作中,我们共用到了两个快捷键Ctrl+q + dCtrl+q + s,但这仅仅是冰山一角,欲窥tmux庞大的快捷键体系,请看下表。

Note: prefix: Ctrl+q

系统指令
前缀 指令 描述
Ctrl+q ? 显示快捷键帮助文档
Ctrl+q d 断开当前会话
Ctrl+q D 选择要断开的会话
Ctrl+q Ctrl+z 挂起当前会话
Ctrl+q r 强制重载当前会话
Ctrl+q s 显示会话列表用于选择并切换
Ctrl+q : 进入命令行模式,此时可直接输入ls等命令
Ctrl+q [ 进入复制模式,按q退出
Ctrl+q ] 粘贴复制模式中复制的文本
Ctrl+q ~ 列出提示信息缓存
Ctrl+q $ 重名名当前会话
窗口(window)指令
前缀 指令 描述
Ctrl+q c 新建窗口
Ctrl+q & 关闭当前窗口(关闭前需输入y or n确认)
Ctrl+q 0~9 切换到指定窗口
Ctrl+q p 切换到上一窗口
Ctrl+q n 切换到下一窗口
Ctrl+q w 打开窗口列表,用于且切换窗口
Ctrl+q , 重命名当前窗口
Ctrl+q . 修改当前窗口编号(适用于窗口重新排序)
Ctrl+q f 快速定位到窗口(输入关键字匹配窗口名称)
表三:面板(pane)指令
前缀 指令 描述
Ctrl+q " 当前面板上下一分为二,下侧新建面板
Ctrl+q % 当前面板左右一分为二,右侧新建面板
Ctrl+q x 关闭当前面板(关闭前需输入y or n确认)
Ctrl+q z 最大化当前面板,再重复一次按键后恢复正常(v1.8版本新增)
Ctrl+q ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
Ctrl+q ; 切换到最后一次使用的面板
Ctrl+q q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
Ctrl+q { 向前置换当前面板
Ctrl+q } 向后置换当前面板
Ctrl+q Ctrl+o 顺时针旋转当前窗口中的所有面板
Ctrl+q 方向键 移动光标切换面板
Ctrl+q o 选择下一面板
Ctrl+q 空格键 在自带的面板布局中循环切换
Ctrl+q Alt+方向键 以5个单元格为单位调整当前面板边缘
Ctrl+q Ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
Ctrl+q t 显示时钟

tmux的丝滑分屏功能正是得益于以上系统、窗口、面板的快捷指令,只要你愿意,你就可以解除任意的快捷指令,然后绑上你喜欢的指令,当然这就涉及到它的可配置性了。

补充
快捷键 功能
Ctrl+q % 竖直拆分屏幕(两个 Shell 分别位于左右)
Ctrl+q " 水平拆分屏幕(两个 Shell 分别位于上下)
Ctrl+q O 切换到另一个 Shell
Ctrl+q ? 查看帮助
Ctrl+q d 断开 tmux 并让其在后台运行(可以使用 tmux attach 重新进入)
Ctrl+q <arrow key> 光标切换到其他窗格 <arrow key> 是指向要切换到的窗格的方向键
比如切换到下方窗格,就按方向键↓
Ctrl+q ; 光标切换到上一个窗格
Ctrl+q o 光标切换到下一个窗格
Ctrl+q { 当前窗格与上一个窗格交换位置
Ctrl+q } 当前窗格与下一个窗格交换位置
Ctrl+q Ctrl+o 所有窗格向前移动一个位置,第一个窗格变成最后一个窗格
Ctrl+q Alt+o 所有窗格向后移动一个位置,最后一个窗格变成第一个窗格
Ctrl+q x 关闭当前窗格
Ctrl+q ! 将当前窗格拆分为一个独立窗口
Ctrl+q z 当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+q Ctrl+<arrow key> 按箭头方向调整窗格大小
Ctrl+q q 显示窗格编号
prefix Ctrl+q 激活控制台;此时以下按键生效
系统操作 ? 列出所有快捷键;按q返回
d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D 选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+z 挂起当前会话
r 强制重绘未脱离的会话
s 选择并切换会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
[ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
窗口操作 c 创建新窗口
& 关闭当前窗口
数字键 切换至指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 在前后两个窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口;这样便于识别
. 修改当前窗口编号;相当于窗口重新排序
f 在所有窗口中查找指定文本
面板操作 将当前面板平分为上下两块
% 将当前面板平分为左右两块
x 关闭当前面板
! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
o 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板

创建tmux

1
tmux new -s <session-name>

列出已有的tmux列表

  • 命令

    1
    2
    3
    $ tmux ls
    ## or
    $ tmux list-session
  • Ctrl+q s:列出所有会话。

进入已创建的tmux

  • 使用会话编号

    1
    2
    3
    $ tmux attach -t <session-number>
    ## or
    $ tmux a -t <session-number>
  • 使用会话名称

    1
    2
    3
    $ tmux attach -t <session-name>
    ## or
    $ tmux a -t <session-name>

切换会话

1
2
3
4
5
## 使用会话编号
$ tmux switch -t <session-number>

## 使用会话名称
$ tmux switch -t <session-name>

重命名会话

  • $ tmux rename-session命令用于重命名会话。

    1
    tmux rename-session -t <session-number> <new-name>

    上面命令将<session-number>号会话重命名。

  • Ctrl+q $

临时退出tmux

  • Ctrl+q d
  • $ tmux detach

杀死tmux

  • tmux外:$ tmux kill-session -t <session-name>

  • tmux内:

    • Ctrl-d
    • <Prefix(ctrl+q)> + :kill-session

删除所有tmux

1
tmux kill-server

1
tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}' | xargs kill

vi-mode

vi emacs 功能
^ M-m 反缩进
Escape C-g 清除选定内容
Enter M-w 复制选定内容
j Down 光标下移
h Left 光标左移
l Right 光标右移
L 光标移到尾行
M M-r 光标移到中间行
H M-R 光标移到首行
k Up 光标上移
d C-u 删除整行
D C-k 删除到行末
$ C-e 移到行尾
: g 前往指定行
C-d M-Down 向下滚动半屏
C-u M-Up 向上滚动半屏
C-f Page down 下一页
w M-f 下一个词
p C-y 粘贴
C-b Page up 上一页
b M-b 上一个词
q Escape 退出
C-Down or J C-Down 向下翻
C-Up or K C-Up 向下翻
n n 继续搜索
? C-r 向前搜索
/ C-s 向后搜索
0 C-a 移到行首
Space C-Space 开始选中
C-t 字符调序

tmux 本地安装

下载

  1. 下载 libevent

    1
    curl -JLO https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
  2. 下载 ncurses

    1
    curl -JLO https://invisible-island.net/datafiles/release/ncurses.tar.gz
  3. 下载 tmux 最新版本

    1
    curl -JLO https://github.com/tmux/tmux/releases/latest/download/tmux-3.6a.tar.gz

编译

  1. libevent

    1
    2
    3
    4
    5
    6
    tar zxvf libevent-2.1.12-stable.tar.gz
    cd libevent-2.1.12-stable
    mkdir -p $HOME/.local/libevent
    ./configure --prefix=$HOME/.local/libevent --enable-shared
    make -j $(nproc)
    make -j $(nproc) install
  2. ncurses

    1
    2
    3
    4
    5
    6
    tar zxvf ncurses.tar.gz
    cd ncurses-*
    mkdir -p $HOME/.local/ncurses/lib/pkgconfig
    ./configure --prefix=$HOME/.local/ncurses --with-shared --with-termlib --enable-pc-files --with-pkg-config-libdir=$HOME/.local/ncurses/lib/pkgconfig
    make -j $(nproc)
    make -j $(nproc) install
  3. tmux

    1
    2
    3
    4
    5
    6
    7
    tar zxvf tmux-3.6a.tar.gz
    cd tmux-3.6a
    mkdir -p $HOME/.local/tmux
    # PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig ./configure --prefix=$HOME/.local/tmux
    PKG_CONFIG_PATH=$HOME/.local/libevent/lib/pkgconfig:$HOME/.local/ncurses/lib/pkgconfig ./configure --prefix=$HOME/.local/tmux
    make -j $(nproc)
    make -j $(nproc) install

    The newly built tmux can be found in ~/.local/tmux/bin/tmux.

    When tmux is installed locally on Linux, the runtime linker may need to be told where to find the libraries using the LD_LIBRARY_PATH environment variable, for example:

    1
    LD_LIBRARY_PATH="$HOME/.local/lib" $HOME/.local/bin/tmux -V

    And to view the manual page, MANPATH must be set:

    1
    MANPATH="$HOME/.local/share/man" man tmux

    Most users will want to configure these in a shell profile, for example in .profile for ksh or .bash_profile for bash:

    1
    2
    3
    export PATH="$HOME/.local/tmux/bin:$PATH"
    export LD_LIBRARY_PATH="$HOME/.local/libevent/lib:$LD_LIBRARY_PATH"
    export MANPATH="$HOME/.local/tmux/share/man:$MANPATH"

QAs

  • configure: error: “libevent not found”

    1
    2
    3
    4
    PKG_CONFIG_PATH="$HOME/.local/libevent/lib/pkgconfig:$HOME/.local/ncurses/lib/pkgconfig" \
    CPPFLAGS="-I$HOME/.local/libevent/include -I$HOME/.local/ncurses/include" \
    LDFLAGS="-L$HOME/.local/libevent/lib -L$HOME/.local/ncurses/lib" \
    ./configure --prefix=$HOME/.local/tmux
  • configure: error: “yacc not found”

    • (RECOMMEND) 方法1: 安装 bison

      1
      sudo apt install bison
    • (convenience) 方法2: 最暴力但有效的方式(跳过 yacc 检查)

      1
      2
      YACC="cat" \
      ./configure --prefix=$HOME/.local/tmux

      tmux 的 configure 脚本允许跳过 yacc, 只需要告诉它假装存在.
      cat 是一个安全的占位符, tmux 源码不会真的用到 yacc 生成内容 (tmux 并不使用 yacc, 只是 autoconf 习惯性检查).

    • 方法3: 本地编译 byacc (未尝试)

  • configure: error: “curses not found”

    在 include 下创建软链接

    1
    2
    cd ~/.local/ncurses/include
    ln -s ncurses/* .
  • tmux: error while loading shared libraries: libevent_core-2.1.so.7: cannot open shared object file: No such file or directory

    使用你本地的 libevent

    1
    export LD_LIBRARY_PATH="$HOME/.local/libevent/lib:$LD_LIBRARY_PATH"
  • -zsh: /root/.local/lib/libtinfo.so.6: no version information available (required by -zsh)

    其实不是 zsh 崩溃, 而是 版本信息不匹配的警告.
    它说明 zsh 需要的 libtinfo 库里缺少符号版本信息(version information), 通常是因为你在 ~/.local/lib 下手动安装或者拷贝了 libtinfo.so.6, 而系统自带的 libtinfo 版本和它不一致.

    • (RECOMMEND) 方法1: 删除或重命名本地 libtinfo.so.6

      如果系统已经有正确版本:

      1
      mv ~/.local/lib/libtinfo.so.6 ~/.local/lib/libtinfo.so.6.bak
    • 方法2: 调整 LD_LIBRARY_PATH,让系统库优先

      1
      export LD_LIBRARY_PATH="/usr/lib:/usr/lib64:$LD_LIBRARY_PATH:$HOME/.local/lib"

refs

  1. 更改Git的样式

    1. 更改主题透明度和光标
    2. 更改字体
    3. 更改中文
  2. 美化

    1. 基本配置

      在用户根目录下新建一个名为 .minttyrc 的文件,写入以下内容,然后重启 git bash,就能看到美化后的样子了。

      1
      2
      3
      $ cd ~
      $ touch .minttyrc
      $ vi .minttyrc

      复制以下代码到 .minttyrc

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      FontHeight=11
      Font=Consolas
      Transparency=low
      FontSmoothing=full
      Locale=zh_CN
      Charset=GBK
      Columns=88
      Rows=26
      OpaqueWhenFocused=no
      Scrollbar=none
      Language=zh_CN

      ForegroundColour=131,148,150
      BackgroundColour=0,43,54
      CursorColour=220,130,71

      BoldBlack=128,128,128
      Red=255,64,40
      BoldRed=255,128,64
      Green=64,200,64
      BoldGreen=64,255,64
      Yellow=190,190,0
      BoldYellow=255,255,64
      Blue=0,128,255
      BoldBlue=128,160,255
      Magenta=211,54,130
      BoldMagenta=255,128,255
      Cyan=64,190,190
      BoldCyan=128,255,255
      White=200,200,200
      BoldWhite=255,255,255
      CursorType=block
      CursorBlinks=no
    2. 更新 git-prompt.d

      仅仅是换了一个主题还不够,还需要更改终端提示符,更改 git 安装目录下 etc 目录里面的一个文件即可,这个文件也可以通过绝对路径访问到。

      进入

      1
      $ cd /etc/profile.d/git-prompt.sh

      复制代码到 git-prompt.sh

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      if test -f /etc/profile.d/git-sdk.sh
      then
      TITLEPREFIX=SDK-${MSYSTEM#MINGW}
      else
      TITLEPREFIX=$MSYSTEM
      fi

      if test -f ~/.config/git/git-prompt.sh
      then
      . ~/.config/git/git-prompt.sh
      else
      PS1='\[\033]0;Bash In $PWD\007\]' # 窗口标题
      PS1="$PS1"'\n' # 换行
      PS1="$PS1"'\[\033[32m\]' # 绿色
      PS1="$PS1"'\u ' # 用户名
      PS1="$PS1"'\[\033[0m\]' # 灰色
      PS1="$PS1"'at ' # 自定义内容
      PS1="$PS1"'\[\033[35m\]' # 粉红色
      PS1="$PS1"'\t ' # 时间
      PS1="$PS1"'\[\033[33m\]' # 黄色
      PS1="$PS1"'\W ' # 当前目录
      if test -z "$WINELOADERNOEXEC"
      then
      GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
      COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
      COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
      COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
      if test -f "$COMPLETION_PATH/git-prompt.sh"
      then
      . "$COMPLETION_PATH/git-completion.bash"
      . "$COMPLETION_PATH/git-prompt.sh"
      PS1="$PS1"'\[\033[36m\]' # change color to cyan
      PS1="$PS1"'`__git_ps1`' # bash function
      fi
      fi
      PS1="$PS1"'\[\033[0m\]' # 灰色
      PS1="$PS1"'$ ' # 命令提示符
      fi

      MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc

Clion 中使用头文件定义类,源文件实现

include什么

导入头文件(.h)和源文件(.cpp)
Note: 只导入 源文件(.cpp) 也可以

CMakeLists.txt

  • 手动添加
1
2
3
4
5
6
7
cmake_minimum_required(VERSION 3.15)
project(HCpp)

set(CMAKE_CXX_STANDARD 11)

add_executable(HCpp main.cpp)
add_executable(ElemType ElemType.cpp ElemType.h)
  • 自动添加
1
2
3
4
5
6
7
# 遍历项目根目录下所有的 .cpp 文件
file (GLOB files *.cpp)
foreach (file ${files})
string(REGEX REPLACE ".+/(.+)\\..*" "\\1" exe ${file})
add_executable (${exe} ${file})
message (\ \ \ \ --\ src/${exe}.cpp\ will\ be\ compiled\ to\ bin/${exe})
endforeach ()

代码

ElemType.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef HCPP_ELEMTYPE_H
#define HCPP_ELEMTYPE_H

#include <iostream>

class ElemType {
public:
int data;

ElemType();
ElemType(int);
friend std::ostream &operator <<(std::ostream &, const ElemType &);
};

#endif //HCPP_ELEMTYPE_H

ElemType.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "ElemType.h"

ElemType::ElemType() {
this->data = 0;
}

ElemType::ElemType(int data) {
this->data = data;
}

std::ostream& operator <<(std::ostream &out, const ElemType &e)
{
out << e.data;
return out;
}

main.cpp

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include "ElemType.h"
#include "ElemType.cpp"

using namespace std;

int main() {
ElemType e = ElemType(10);
cout << e << endl;
return 0;
}

运算符重载:详见 运算符重载

0%