gdb基础

gdb基础 Debug是啥? Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用 本地运行没问题,更换服务器就跑不起来 这个问题就是Debug版本带了一… ...更多

四月 08, 2022 [gdb] #gdb
shell常用知识

shell常用知识 shell基础 记录一些用到的shell知识 常用的cli的快捷键 ALT-? list complete ALT-* insert complete C-x * glob-expand-word M-# insert-comment (M-#) M-g glob-com… ...更多

四月 02, 2022 [bash, 快捷键] #bash #快捷键
stdcall和cdecl

stdcall和cdecl 概念

stdcall调用 stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,由调用者完成压栈操作,被调函数自身在返回前清空堆栈。 WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题: WINAPI _stdcall … ...更多

三月 20, 2022 [c++] #c++
go certificate signed报错

go certificate signed报错 CA证书 数字证书主要用来做签名认证,保证了信息和数据的完整性和安全性 但是在开发过程中经常发生内网环境的证书过期,导致依赖文件无法访问,编译报错 这里记录一下直接用http不加密的方式下载依赖文件 go 主要有几个环境变量, 这样访问这些网址时就会用… ...更多

三月 14, 2022 [openssl] #openssl #go #git
哪些场景应该用emplace_back

哪些场景应该用emplace_back emplace的插入原理 当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造… ...更多

三月 14, 2022 [c++] #c++
零宽断言

零宽断言 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应… ...更多

三月 14, 2022 [regexp, 零宽断言] #regexp #grep
markdown-preview

markdown-preview emacs markdown preview 直接上插件 grip-mode插件依赖grip python3 -m pip install grip

之后使用use-package安装grip-mode, 这样在编辑markdown文件是就自动用浏览器打开预览了 … ...更多

三月 13, 2022 [markdown] #markdown
karabiner-elements

karabiner-elements 使用命令行/vim/emacs等键盘操作比较多的用户,有一点感触就是:小拇指很容易累。本人起初不喜欢修改键盘映射,主要原因是定制化比较多的系统,在团队合作时互相操作会不方便,无论是自己偶尔在别人电脑上使用或者别人在自己的电脑上使用,都会不习惯。ORZ最后因为vi… ...更多

三月 12, 2022 [macOS, keymapping] #macOS #keymapping
cxx抛异常

cxx抛异常 C++程序抛出异常后执行顺序 析构函数中是否可以抛出异常 首先我们看一个常见的问题,析构函数中是否可以抛出异常。答案是C++标准指明析构函数不能、也不应该抛出异常!   C++异常处理模型是为C++语言量身设计的,更进一步的说,它实际上也是为C++语言中面向对象而服务的。C++异常处理… ...更多

二月 10, 2022
Hexo and gitalk

Hexo and gitalk Welcome to Hexo! This is very first post. Check documentation for more info. If get any problems when using Hexo, can find the answer … ...更多

六月 11, 2021 #hexo
Vim 使用系统剪切板

Vim 使用系统剪切板

Vim 是运行在 Terminal 里的 Shell 程序,所以要把内容拷贝出来可以通过 Terminal,也可以通过 Vim 自己。不配置 Vim 剪切板时只能通过 Shell 来拷贝粘贴:

  • 通过 Shell 拷贝(比如在 iTerm 里按住 Alt 选取内容)会有问题:比如会包含 Vim 左侧行号、折行变成了换行。
  • 通过 Shell 粘贴有类似的问题:相比于 p 命令,在插入模式下 Ctrl+V 时 Vim 会把内容当作字符键入,触发 Vim 的所有处理键入的插件,比如自动补全、语法检查等。不仅会很慢,而且可能会破坏你的内容(比如粘贴一对括号,可能 Vim 会再帮你自动补全一个多余的右括号)。

所以完美的拷贝粘贴一定要通过 Vim 本身。Vim 中 p(paste)、d(delete)、y(yank)等拷贝粘贴操作使用的是 匿名寄存器 ""(unnamed register),本文就来解释怎么在 Mac/Windows/Linux 上把 Vim 的 匿名寄存器 映射到操作系统的剪切板。

TL; DR

  1. 确保你的 vim 支持剪切板,通过 vim --version | grep clipboard 检查。
  2. 确定你的剪切板寄存器是 "+(XA_SECONDARY)还是 "*(XA_PRIMARY)。
  3. 同步剪切板和匿名寄存器,在 ~/.vimrc 添加配置比如 set clipboard=unnamed
...更多

九月 04, 2020 #Vim #剪切板 #寄存器 #Vim-Practice
4K 设备配置指南

4K 设备配置指南

只要 4K 显示器就能拥有 4K 体验吗?这篇文章写在 4K 出现 六年之后的今天,再来重新审视这个问题,以及如何正确地配备显示器、片源、网络和视频线缆。

...更多

七月 04, 2020 #网络 #视频 #HDMI
Bash 转义和引号的使用

Bash 转义和引号的使用

字面量、转义和引号是任何编程语言的基础,但却少有人认真地学习 Bash 中的转义和 引号。 好消息是 Bash 引号的语义非常简单,这篇文章就可以完全描述。 TL;DR

  1. 反斜线用来转义除换行之外的所有字符,反斜线加换行为连行;
  2. 单引号用来直出字面量,其内容部分不允许转义,包括单引号转义也不允许;
  3. 双引号内允许 命令替换 和对特定几个字符转义,双引号内的反斜线对其他字符没有特殊含义,会被当作字面量处理。
...更多

六月 26, 2020 #Bash #xargs #grep #sed #转义
对 tail -f 使用管道

对 tail -f 使用管道

最近发现 tail -f 时管道后面的程序都会被卡住,才发现 grep,sed,awk 不直接输出到 TTY 时都是带缓冲的。平时跟在 cat 后使用没问题是因为输入管道关闭触发了 flush。本文详细解释其中的坑,以及怎么让 sed, awk, grep 立即 flush。 TL;DR:grep 添加 --line-buffered,sed 添加 -u,awk 调 fflush()

...更多

六月 06, 2020 #TTY #Unix #管道 #awk #grep #sed
从当前位置打开 Terminal

从当前位置打开 Terminal

我们有很多工作区时,每次打开一个 Terminal 都需要先 cd 到和上一个 Terminal 一样的位置再开始工作。 这个过程既然是固定的,那就一定能自动化。

Harttle 遇到的具体场景是,i3wm 有 workspace(工作区)的概念,每个工作区可以打开任意多个 Terminal。 我希望同一个工作区的 Terminal 打开时都有一样的 CWD(Current Working Directory), 不同的工作区有不同的 CWD。即:打开 Terminal 时,自动 cd 到当前工作区其他 Terminal 所在的位置

本文基于 Reddit 上的一个小脚本展开,这一思路适用所有 Terminal Emulator 和 Desktop Environment(尽管我只有 Window Manager 也是适用的)。

...更多

十二月 26, 2019 #Terminal #Shell #i3wm
X11 多显示器配置:玩转 XRandR

X11 多显示器配置:玩转 XRandR

RandR(Resize and Rotate)协议是基于 X Window 系统的一个扩展,它可以直接操作显示器模式、刷新率,属于 DDX 组件。 xrandr 是官方的 RandR 配置工具,比老的 Xinerama 机制更容易测试和配置。 本文在没有桌面环境的情况下直接对底层软件进行配置,如果有安装某种 DE 可以在其控制面板中找到对应的配置。

...更多

十二月 24, 2019 #Mac #X11 #XRandR #HDMI
VT 下的键盘映射设置

VT 下的键盘映射设置

最近遇到在 X11 下切换到 TTY 可以用 Ctrl+LeftAlt+Fn 或 Ctrl+RightAlt+Fn,但从 TTY 切换回 X11 只能使用 Ctrl+LeftAlt+Fn 的问题。 为了手感比较一致今晚解决了这个问题并记录在这里,希望能帮助遇到同样问题的人。

具体原因是 X11 下的键盘映射由 xkbmap 来管理,它默认提供了比较复杂的配置;但 VT 直接运行在内核上没有经过 X11 它的配置更直接和简单。 这两份配置的不同导致了在 VT 下 RightAlt 不能正确映射。 这里我们关心的是 keycode 到 keysym 的映射关系, 更过关于 scancode, keycode, keysym 的概念解释可以先参考 ArchLinux 键盘映射 的第一小节。 这个 keycode 到 keysym 的映射关系就是我们常说的 keymap, 就是装各种系统时要选的键盘布局。 所有的 keymap 都存在 /usr/share/dbd/keymaps 中:

find /usr/share/kbd/keymaps/ -type f

关键在于 X11 和 VT 中如何选择这些文件,其中每个 .map.gz 文件解压后得到的 .map 文件即为键盘布局文件。文件中的数字表示 keycode,Alt、Control 这样的词即为 keysym。

...更多

十二月 07, 2019 #ArchLinux #keycode #TTY #X11 #vconsole