X窗口系统

X窗口系统诞生于1984年MIT的研究,后来成为Unix, 类UNIX等操作系统所一致适用的标准化软件工具包及显示架构的运作协议。目前使用最普遍最受欢迎的一个实现是X.Org,它所用的协议版本是X11, 所以Xorg也经常被叫做X11。

Read more »

Overview(#158)

复杂的OpenGL应用和对高分辨率的追求使纹理的大小巨增,但是可供一个GPU使用的物理内存是有限的,一旦内存使用殆尽,内存换页就可能发生,性能严重下降,或者更糟,应用直接挂了。但另一方面GPU可访问的地址空间目前已经可以达到GB,甚至TB.

Read more »

smart pointer是C11引入的,被包含在C标准库中。smart pointer是为了管理对象的所属(object ownership)而设计的,smart pointer对象负责自动地销毁所关联对象。常见的smart pointer有:

Read more »

Overview(#117)

ARB_texture_storage的主要目的是简化纹理一致性(consistency)和完整性(completeness)检查,以减小实现的开销。

Read more »

概述(#84)

传统的OpenGL纹理格式(texture format)的纹理数据存储和解释是统一的,纹理就是被解释成颜色。而在现代OpenGL应用中,大多数纹理并不是代表颜色,而是代表像shadow maps, normal maps, page tables, occlusion data等等这样的数据。对于后者,我们将纹理数据称作"RGBA",只是对数据在现有模型上的一种方便的映射,但并不是数据实际上的准确解释。

Read more »

概述(#183)

ARB_shader_ballot给一组线程(a group of invocations)提供某些形式的线程间(cross-invocation)通信的能力。它要么是通过广播某个线程作用域里的值,要么是通过一个位数组(bitarray)表示一组线程中每个线程作用域里的可能的值。

Read more »

概述(#124)

ARB_texture_view的主要目的是通过创建已有纹理对象的视图(view), 来产生新的纹理对象,以达到共享同一纹理存储(data store)的目的。它可以从以下3个方面创建纹理视图:

Read more »

概述(#14)

ARB_point_parameters允许用户设置点的扩展几何特征。这些点的几何特征主要用来渲染粒子或微小光源,通常被称为光点(Light Points).

Read more »

Visual Block Selection

  • 选择 {}(curly braces) 之间的行(包括 {})

    • v%
  • 选择 {}(curly braces) 之间的行(不包括 {})

    • vi{

注意:光标必须放在 { 或者 }

Copy & Paste

Copy to clipboard

  • Normal 模式
    • "+y

Paste from clipboard

X11 window system 有 3 个 selections:

  • PRIMARY 表示当前的可见 selection
  • SECONDARY
  • CLIPBOARD 通常所说的剪贴板,用来完成剪贴,复制和粘贴操作

Vim 有两个专门的寄存器分别与 PRIMARY selection 和 CLIPBOARD selection 对应

  • "* (quotestar) PRIMARY
  • "+ (quoteplus) CLIPBOARD

如果要在 Vim 内部剪贴,复制/粘贴就使用 quotestar, 如果要将内容剪贴,复制/粘贴到系统剪贴板,就使用 quoteplus

举个例子,在 WSL Ubuntu 里如果想粘贴 Windows 剪贴板里的内容到 vim (最好是 neovim, 因为 vim 可能未使能 clipboard)

1
echo "Hello, world!" | clip.exe
  • Normal 模式
    • "+p

如果想粘贴 Ubuntu 剪贴板里的内容

1
echo "Hello, world!" | xclip
  • Normal 模式
    • "*p

Copy from above or below

在 Insert 模式下

  • <ctrl-y> copies the character from the line above
  • <ctrl-e> copies the character from the line below (本行就是这样输入的)

Search & Replace

删除多行 C-style 注释

  • s;/\*\_.\{-}\*/;;

    • ; 因为要匹配 /, 为了省去转义 / 的麻烦,将 search 命令的分隔符由 / 改为 ;

    • /\* 匹配开始的 /*

    • \_. 匹配任意字符,包括 \n, 所以常用在多行匹配

    • \{-} 指非贪婪 (non-greedy) 匹配,即匹配最短的字串,默认是贪婪匹配,匹配最长的字串

    • \*/ 匹配结尾的 */

    • ;; 指使用空替换匹配结果,即删除

    • 以下是 vim 中在单行中使用的通配符 (wildcard), 这些通配符一般不能匹配换行 \n

      • . 匹配除了 \n 的任意字符
      • ^ 行首,即锚点 (anchor)
      • $ 行尾,即锚点
      • \s 匹配 space, tab, 但不匹配 \n
    • 以上通配符加上 \_ 后可以在多行匹配中使用,即也可以匹配 \n

      • \_. 匹配任意字符,包括 \n
      • \_^ 多行中第一行行首
      • \_$ 多行中最后一行行尾
      • \_s 匹配 space, tab 和 \n

删除空白行

  • g/^\s*$/d

    • g 指所有行搜索,而不是默认的光标所在行
    • ^\s*$ 匹配行首到行尾之间任意个空白字符,即空白行
    • d 删除命令 (delete)

搜索不匹配某模式的行,即反向搜索

  • /^\(\(^# .*$\)\@!.\)*$

    • / 查找命令 (search) 的提示符
    • ^\(\(The_Regex\)\@!.\)*$ 反向查找的命令固定模式,本例中 The_Regex^# .*$ 即以 # 开头的行,所以整个表达式匹配的就是不以 # 开头的所有行
  • :v/^# .*$/p

    • 与上面的反向查找命令功能相同, 但会将匹配结果显示在 Visual 模式下

大小写转换

  • s/\(^# .*$\)/\L\1/

    • \(The_Regex\) 为了向前索引,即后面 \1 所指的部分,本例中 The_Regex^# .*$, 意思同上
    • \L\1 \LLowercase, 即将 \1 匹配的结果中的所有字母都换成小写
  • s/\(^# .*$\)/\U\1/

    • 与上面的表达式功能相反,即将 \1 匹配的结果中的所有字母都换成大写 (Uppercase)
0%