BNU-FZH

fengzhenhua@outlook.com

有时候在编写LaTeX文件时需要插入图片,但是图片源自网络,这时可以使用\write18调用外部命令,下载图片,然后再插入到文件中,引用网络上的一个具体例子为:

\write18 插入图片
1
2
3
4
5
6
\documentclass{article}
\usepackage{graphix}
\begin{document}
\write18{wget http://www.some-site.com/path/to/image.png}
\includegraphic{image.png}
\end{document}

参考:LaTeX技巧427:LaTeX如何插入网络上的图片?

在日常编写脚本的过程中,不可避免的可打开一些文件进行编辑,对于一些特定的文件可以使用某相应的软件打开。但是,若脚本需要处理的有各种各样的文件,若针对每一个文件都设计一个对应程序来打开,原理上可行,但是比较麻烦。现在的Linux基本都内置了命令xdg-open, 它可以自动调用系统的默认程序打开文件,可以大大提高脚本的效率。为了方便查询,此贴出它的帮助文件:

xdg-open --help
1
2
3
4
5
6
7
8
9
10
   xdg-open -- opens a file or URL in the user's preferred
application

Synopsis

xdg-open { file | URL }

xdg-open { --help | --manual | --version }

Use 'man xdg-open' or 'xdg-open --manual' for additional info.

提出这个要求是因为我今天在脚本xugit.sh中加入了根据选项打开文件,避免每次都切换路径的麻烦。尽管有z-lua等路径切换插件,但是在连接U盘时,使用ugit -l选择文件再打开,更加直接。

使用diary.sh写博客已经有近两年了,对于菜单一直没有细致的设计,这主要是因为对Shell理解的不够透彻。今天实现了真正意义上的可选择菜单,实现原理是:不再使用clear每次按键后清屏,改用指定行输出来输出菜单!这样就可以避免每按一次键就闪烁一次的不好体验,同时对于一屏的信息,当只有一二行发生变化时,整体上看很流畅:

运行截图展示

可选择菜单

可选择菜单支持vim的快捷键,即j向下,k向上,同时J向下一页,K向上一页.

shell源代码

可选择菜单shell源码
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
DY_FILES=($(ls /home/$USER/))  #设置用来列表输出的数组, 此处可以改为您自己的路径
DY_SET_SIZE(){
TTY_H=$(stty size|awk '{print $1}')
let TTY_H-=2
TTY_W=$(stty size|awk '{print $2}')
}
DY_LINE="-"
DY_MKLINE(){
l=0
while [ $l -lt $TTY_W ]; do
echo -n "$DY_LINE"
let l+=1
done
}
NEO_FORMAT=7 # 高亮行的格式,可以自行修改
# 参数: 输出行,行号,数组号, 高亮行号
NEO_PRINT(){
if [[ $3 -eq $4 ]]; then
echo -e "\033[$1;1H\033[?25l\033[${NEO_FORMAT}m[$2] ${NEO_ARR[$3-1]}\033[0m\033[K\033"
else
echo -e "\033[$1;1H\033[?25l[$2] ${NEO_ARR[$3-1]}\033[K"
fi
}
# 参数:$1 起始点 $2 列表长度 $3 高亮行
NEO_LIA(){
k=0 ; i=$1
while [[ $k -lt $TTY_H ]]; do
let k+=1
if [ $i -lt -$2 ]; then
let i=$i+$2
fi
let i+=1
if [ $i -gt $2 ]; then
let i=$i-$2
fi
if [ $i -lt 1 ]; then
let j=$i+$2
else
j=$i
fi
NEO_PRINT $k $j $i $3
done
}
NEO_SELECT(){
echo -ne "\r\033[${NEO_FORMAT}m[s] 选择\033[0m "; echo -ne "\033[K" ; read TLS_SNum
expr "$TLS_SNum" + 0 &> /dev/null
if [ $? -eq 0 ]; then
if [ $TLS_SNum -lt $1 -o $TLS_SNum -gt $2 ]; then
echo "编号超出范围,请重新选择编号!"
exit
else
NEO_OUT_H=$TLS_SNum
fi
else
echo "输入非数字,请重新输入编号!"
exit
fi
}
# 参数: 输出行,光标所在行
NEO_MENUE(){
let r=$1+2
if [ $NEO_SEL_ON -eq 1 ]; then
echo -ne "\033[$r;1H[j] 向下 [k] 向上 [s] 选择 [q] 退出 \033[${NEO_FORMAT}m$2\033[0m\033[K\033[?25h"
else
echo -ne "\033[$r;1H[j] 向下 [k] 向上 [q] 退出 \033[${NEO_FORMAT}m$2\033[0m\033[K\033[?25h"
fi
}
NEO_LISA(){
DY_SET_SIZE
p=$1 ; let q=$p+$TTY_H; m=$3
if [ $q -gt "${#NEO_ARR[*]}" ]; then
let q=$q-"${#NEO_ARR[*]}"
let p=$p-"${#NEO_ARR[*]}"
let m=$m-"${#NEO_ARR[*]}"
fi
if [ $p -le "-${#NEO_ARR[*]}" ]; then
let q=$q+"${#NEO_ARR[*]}"
let p=$p+"${#NEO_ARR[*]}"
let m=$m+"${#NEO_ARR[*]}"
fi
NEO_LIA $p $2 $m
DY_MKLINE
if [ $m -le 0 ]; then
let NEO_CURRENT=$m+"${#NEO_ARR[*]}"
else
NEO_CURRENT=$m
fi
NEO_MENUE "$TTY_H" "$NEO_CURRENT"
read -s -n 1 ListDo
case "$ListDo" in
j)
let m+=1
if [ $m -gt $q ]; then
let p+=$TTY_H
fi
NEO_LISA $p $2 $m
;;
J)
let p+=$TTY_H
let m=$p+1
NEO_LISA $p $2 $m
;;
k)
let m-=1
if [ $m -le $p ]; then
let p-=$TTY_H
fi
NEO_LISA $p $2 $m
;;
K)
let m=$p
let p-=$TTY_H
NEO_LISA $p $2 $m
;;
"")
if [ $NEO_SEL_ON -eq 1 ]; then
NEO_OUT_H=$m
else
exit
fi
;;
s)
if [ $NEO_SEL_ON -eq 1 ]; then
NEO_SELECT $p $q
else
NEO_LISA $p $2 $m
fi
;;
q)
exit
;;
esac
}
NEO_LIB(){
k=0 ; i=$1
while [[ $k -lt $2 ]]; do
let k+=1
if [ $i -lt -$2 ]; then
let i=$i+$2
fi
let i+=1
if [ $i -gt $2 ]; then
let i=$i-$2
fi
if [ $i -lt 1 ]; then
let j=$i+$2
else
j=$i
fi
NEO_PRINT $k $j $i $3
done
}
NEO_LISB(){
DY_SET_SIZE
p=$1 ; q=$2 ; m=$3
if [ $m -gt $q ]; then
let m=$p+1
fi
if [ $m -le $p ]; then
m=$q
fi
NEO_LIB $p $2 $m
DY_MKLINE
NEO_MENUE $q $m
read -s -n 1 ListDo
case "$ListDo" in
j)
let m+=1
NEO_LISB $p $2 $m
;;
k)
let m-=1
NEO_LISB $p $2 $m
;;
s)
if [ $NEO_SEL_ON -eq 1 ]; then
NEO_SELECT $p $q
else
NEO_LISB $p $2 $m
fi
;;
"")
if [ $NEO_SEL_ON -eq 1 ]; then
NEO_OUT_H=$m
else
exit
fi
;;
q)
exit
;;
esac
}
# 参数:列出的数组, 1开启选择,0关闭选择
NEO_LIST(){
NEO_ARR=($1) ; NEO_SEL_ON=$2
clear
DY_SET_SIZE
if [ "${#NEO_ARR[*]}" -gt $TTY_H ]; then
NEO_LISA 0 "${#NEO_ARR[*]}" 1
else
NEO_LISB 0 "${#NEO_ARR[*]}" 1
fi
echo $NEO_OUT_H # 目标是获得光标所在的行
}
NEO_LIST "${DY_FILES[*]}" 1 # 测试程序命令

在对函数进行命名时,每个人都有自己的标准。本书会推荐两种,希望这两种标准成为读者以后编程时的命名规范。比较著名的命名规则首推匈牙利命名法,这种命名方法是由Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi)提出的。其主要思想是“在变量和函数名中加入前缀,以增进人们对程序的理解”。匈牙利命名法的关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。骆驼(Camel)命名法近年来越来越流行,在许多新的函数库和 Java 开发平台下使用得相当多。正如它的名称所表示的那样,骆驼命名法指的是混合使用大小写字母来构成标识符的名字,其中的第一个单词首字母小写,余下的单词首字母大写。帕斯卡(Pascal)命名法与骆驼命名法类似。只不过骆驼命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。

对于以上的几种命名规则,本书认为对变量或函数进行描述时常用的是骆驼命名法和匈牙利命名法,因此,我们推荐使用这两种命名标准。

对于函数来说,一般是根据函数的功能来进行命名,通常有两种命名方式:

  • 对于一些复杂点的函数操作,可以使用“操作对象+操作”的形式命名,如array_sort()函数,从字面上就可以看出,该函数用于对数字进行排序。
  • 对于简单的函数,可以直接使用操作名作为函数名,但要注意不要和系统的命令相同,否则容易造成不必要的错误,如address(),对该函数进行操作。

对于变量来说, 一般通过匈牙利命名法命名:

  • 对于单个英文单词就可命名,可直接用该单词进行命名,如变量average可用于对变量“平均数”的命名。
  • 对于单个单词无法命名的单词,可通过双单词或多单词形式的缩略词进行命名,如dir_num可用于命名变量“目录个数”

对于常量来说,可通过将该变量全部设置为大写与变量形成区别,下面是常量的命名方式:

  • 对于单个单词可以名句的,可直接使用该单词的全部大写形式进行命名,如:常量TOTAL可对常量“总数”进行命名。
  • 对于单个单词无法表达清晰的常数,可以通过加下画线的形式命名,如GLOBAL_CON可以常量“全局常量”进行命名。

注:上述引用自《LINUX SHELL 编程从初学到精通》

为了提高我们使用 Bash Shell 的效率,本文总结了一些 Bash 中常用的高效快捷键,可以帮助我们在快节奏的学习和工作环境中提高生产力。熟悉了这些常用的快捷键之后,将会极大的提升我们与终端交互的速度,从而有效利用时间。

光标移动

快捷键 对应功能
Ctrl + a 或 Home 将光标移动到整行命令的开头 (#)
Ctrl + e 或 End 将光标移动到整行命令的末尾 (#)
Ctrl + b 或 <- 将光标向左移动一个字符 (#)
Ctrl + f 或 -> 将光标向右移动一个字符 (#)
Alt + b 或 Ctrl + <- 将光标向左移动到当前单词或前一个单词的第一个字母上 (#)
Alt + f 或 Ctrl + -> 将光标向右移动到当前单词或后一个单词的末尾的第一个空格处 (#)
Alt + c 将光标向右移动到当前单词或后一个单词的末尾的第一个空格处,并将对应单词的首字母大写
Alt + u 将光标向右移动到当前单词或后一个单词的末尾的第一个空格处,并将对应单词的所有字母大写
Alt + l 将光标向右移动到当前单词或后一个单词的末尾的第一个空格处,并将对应单词的所有字母小写
Alt + -> 将光标向右移动到当前单词或后一个单词的末尾的第一个空格处 (#)
Alt + <- 将光标向左移动到当前单词或前一个单词的首字母处 (#)

终端编辑

快捷键 对应功能
Ctrl + u 删除从命令开始位置到当前光标所在位置之前的所有字符(会保留当前光标所在位置的字符) (#))
Ctrl + k 删除从当前光标位置到结尾的所有字符(不保留当前光标所在位置的字符) (#)
Ctrl + w 删除当前光标之前的第一个命令行参数或从光标位置往左删除至上一个空字符处(会保留当前光标位置的字符) (#)
Ctrl + t 交换当前光标之前和之后的两个字符
Ctrl + h 或 Backspace 删除光标之前的单个字符 (#)
Ctrl + d 或 Delete 往后删除当前光标所在位置的字符 (#)
Alt + d 或 Ctrl + Delete 往右删除从当前光标到下一个单词结尾的所有字符(不会保留当前光标所在位置的字符)
Alt + Backspace 往左删除从当前光标到上一个单词开头的所有字符(会保留当前光标所在位置的字符)

任务处理

快捷键或命令 对应功能
Ctrl + c 通过向当前前台进程发送SIGINT信号来中断当前前台进程。默认行为是终止进程 (#)
Ctrl + z 向进程发送SIGTSTP信号,并挂起当前前台进程。可以使用fg命令将重新将进程拉回到前台 (#)
[Command] & 将Command命令放到后台执行,一般和nohup一起使用(eg: nohup ping http://www.baidu.com &) (#)
jobs 或 jobs -l 查看当前终端后台所执行的用户提交任务 (#)
kill -9 PID 杀掉进程ID号为PID的进程 (#)

其他

快捷键 对应功能
Ctrl + l 清除整个屏幕,与clear命令作用相同 (#)
Ctrl + s 暂停终端屏幕的显示
Ctrl + q 终止Ctr

旧版的Gnome3默认的终端叫gnome-terminal, 新版(2023年5月之后)的新终端控制台启动命令叫kgx, 于是解决方法为: 设置键盘自定义键盘设置自定义快捷键

Console 设置启动快捷键

今天有同学遇到一个问题,她的KDE-Plasma 桌面莫名其妙的变大了,一直不能设置回来,调显示器分辨率也不行。由于我平时使用Gnome作为主力,好久不使用KDE-Plasma了,所以一时也找不到症结所在。最初的判断是她误删除了配置文件,同时Endavour 也很长时间没有升级了,所以决定把系统升级到Plasma6.0, 如果是配置文件删除了的话,那系统升级后会重新建立的,但是重启后仍然不行!一时间解决不了问题,但是突然想起来,有可能是她误触了某些键导致开启了KDE-Plasma的屏幕缩放功能, 于是按这个思路百度了一下,发现确实是她误触了。解决方法是: Meta+= 放大屏幕, Meta+-缩小屏幕, Meta+0恢复到初始, 真是”踏破铁鞋无密处,得来全不费工夫“!为了方便大家,特附上可以提高工作效率的快捷键如下:

1.应用程序启动器(元)

  • 功能:打开应用程序启动器,这是所有已安装程序的门户。
  • 优点:无需使用鼠标导航来启动应用程序,从而节省时间。

2. 运行命令界面(Alt+Space/Alt+F2)

  • 功能:激活命令框以快速启动程序或执行命令。
  • 优点:简化运行应用程序或命令的过程,无需导航菜单。

3.系统活动(Ctrl+Esc)

  • 功能:显示正在进行的系统活动和资源使用情况的概述。
  • 优点:对于监控系统性能和识别资源密集型进程至关重要。

4.关闭窗口(Alt+F4)

  • 功能:立即关闭活动窗口,快速退出程序。
  • 优点:通过允许快速关闭应用程序来增强窗口管理。

5.退出应用程序(Ctrl+Q)

  • 功能:退出当前应用程序,是跨多个程序的常用快捷方式。
  • 好处:提供统一的退出方法,增强用户体验。

6. 强制退出(Ctrl+Alt+Esc)

  • 功能:启动强制关闭无响应应用程序的工具。
  • 好处:对于重新获得对无响应应用程序的控制至关重要。

7. 显示窗口 (Ctrl+F10)

  • 功能:一次显示所有打开的窗口,以便于导航。
  • 好处:通过允许快速窗口选择,极大地改进了多任务处理。

8. 显示桌面(Ctrl+F12)

  • 功能:最小化所有窗口以显示桌面,提供对文件和小部件的访问。
  • 优点:提供整洁的工作空间并快速访问桌面项目。

9. 窗口导航(Alt+Tab/Alt+Shift+Tab)

  • 功能:能够在打开的窗户中快速循环,向前和向后。
  • 好处:促进任务之间的平滑过渡并提高工作流程效率。

10. 放大/缩小(Meta+=/Meta+-)

  • 功能:允许放大和缩小桌面视图。
  • 优点:增强可视性和可访问性,特别是对于有视力障碍的用户。

11. 恢复缩放(Meta+0)

  • 功能:将桌面缩放级别重置为默认设置。
  • 优点:快速标准化视图,在放大细节或辅助功能后特别有用。

12. 下一个活动(Meta+Tab)

  • 功能:切换到下一个 KDE 活动,这是工作区组织的独特功能。
  • 优点:通过允许在针对特定任务定制的不同工作区之间轻松导航来提高工作效率。

13.上一个活动(Meta+Shift+Tab)

  • 功能:返回到上一个活动,有助于高效的工作区管理。
  • 优点:可以快速反转到以前使用的工作区,保持流畅的工作流程。

14. 切换到桌面 1-4(Ctrl+F1 至 Ctrl+F4)

  • 功能:直接切换到前四个虚拟桌面之一。
  • 优点:便于在多个桌面之间轻松快速地导航,从而增强多任务处理能力。

15. 添加小部件(手动方法)

  • 功能:提供一种通过桌面上下文菜单或面板选项手动添加小部件的方法。
  • 优点:允许对工作区进行定制和个性化,以满足个人需求。

16. 锁定屏幕(Ctrl+Alt+L)

  • 功能:安全锁定屏幕,防止未经授权的访问。
  • 好处:对于离开计算机时维护隐私和安全至关重要。

17. 平移(元+箭头键)

  • 功能:按照箭头键的方向导航放大的桌面视图。
  • 优点:放大细节或可访问性时,可用于探索桌面的不同区域。

18. 打开窗口操作菜单(Alt+F3)

  • 功能:显示带有各种窗口管理选项的菜单。
  • 优点:提供对窗口大小调整、移动和其他管理功能的快速访问。

19.面板小部件管理(面板选项)

  • 功能:通过上下文菜单或面板控制器提供对面板中小部件管理的访问。
  • 优点:支持自定义面板,为用户界面添加功能和效率。

20.最小化全部/显示桌面(Ctrl+F12)

  • 功能:快速最小化所有打开的窗口,露出桌面。
  • 优点:对于快速访问桌面项目或从干净的工作区开始非常有用。

通过将这些快捷方式融入到您的日常使用中,您可以更轻松、更高效地导航和控制 KDE Plasma。无论您是在处理复杂的项目还是只是浏览,这些快捷方式都旨在增强您在 KDE 环境中的整体体验。

结论

掌握 KDE Plasma 的键盘快捷键是提高工作效率并简化与 Linux 桌面环境交互的有效方法。通过熟悉这 20 个最重要的快捷方式,您可以显着提高从简单的应用程序启动到复杂的工作区管理等任务的效率。这些知识不仅可以节省时间,还可以丰富您的整体用户体验,使 KDE Plasma 成为满足您日常计算需求的更强大且用户友好的界面。无论您是新用户还是经验丰富的 Linux 爱好者,这些快捷方式都是您更熟练、更愉快地使用 KDE Plasma 的宝贵工具。

之前一直使用有名的高亮缩进插件indent-blankline.nvim , 同时也有一个专门用于配置indent-blankline彩虹缩进的插件indent-rainbowline. 但是自从昨天升级后发现这个插件报错,而且我也不愿意再消耗时间去修复这个bug, 于是经过搜索发现了另一个替代品hlchunk.nvim, 同时配置好以后发现还是挺好用的, 本文记录我的电脑配置以方便大众。

2024年05月31日, 由于官方对hlchunk.nvim做了大量更新,所以其配置相应发生变化,为了确保最新版本的使用,今天更新为可用的配置。

安装和配置

  1. Lazy.nvim中,找到文件~/.config/nvim/lua/lazy-init.lua, 然后添加

    1
    2
    3
    4
    {
    "shellRaining/hlchunk.nvim",
    event = { "BufReadPre", "BufNewFile" }
    },

  2. 编写配置文件~/.config/nvim/lua/plg/hlchunk.lua

    ~/.config/nvim/lua/plg/hlchunk.lua
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #! /usr/bin/env lua
    -- hlchunk.lua
    -- https://fengzhenhua.gitlab.io/2024/05/18/Neovim高亮缩进线插件hlchunk
    -- Copyright (C) 2024 feng <feng@archlinux>
    --
    require('hlchunk').setup({
    blank = {
    enable = false,
    chars = {
    " ",
    },
    style = {
    { bg = "#434437" },
    { bg = "#2f4440" },
    { bg = "#433054" },
    { bg = "#284251" },
    },
    },
    chunk = {
    enable = true,
    chars = {
    horizontal_line = "─",
    vertical_line = "│",
    left_top = "┌",
    left_bottom = "└",
    right_arrow = "─",
    },
    style = "#00ffff",
    },
    indent = {
    enable = true,
    use_treesitter = false,
    -- chars = { "│", "¦", "┆", "┊", }, -- more code can be found in https://unicodeplus.com/
    chars = { "│" },
    style = {
    -- hlchunk 配色
    "#8B00FF",
    "#FF0000",
    "#FF7F00",
    "#FFFF00",
    "#00FF00",
    "#00FFFF",
    "#0000FF",
    "#8B00FF",
    -- indent-blankline 配色
    -- "#E06c75",
    -- "#E5C07B",
    -- "#61AFEF",
    -- "#D19A66",
    -- "#98C379",
    -- "#C678DD",
    -- "#56B6C2",
    -- "#8B00FF",
    },
    },
    line_num = {
    style = "#806d9c",
    priority = 10,
    use_treesitter = false,
    }
    })

  3. 启用hlchunk

    ~/.config/nvim/init.vim
    1
    lua require('plg/hlchunk')

官方仓库中的说明

blank

blank 可以用来做什么

我们代码的缩进一般是由空格或者 tab 组成的,因此可以在这些空位上动一些手脚,比如添加特殊字符表示这是一个空格,或者添加背景颜色,做出彩虹的效果。这个 mod 实质上继承自 indent,重写了 render 方法而已。

配置项

由于继承自 indent,他们的配置几乎相似和通用。blank mod 的默认配置如下:

1
2
3
4
local default_conf = {
priority = 9,
chars = { "․" },
}

chars 是一个 lua 表,其中的字符用来指示如何渲染 blank 字符,你可以设置为下面这样,来循环使用这些字符(尽管这样设置并不会很好看):

1
2
3
4
5
6
7
8
chars = {
" ",
"․",
"⁚",
"⁖",
"⁘",
"⁙",
},

style 继承自 indent,因此和 indent 的颜色实际上是一样的,并且配置方式一样。详情见 indent

example

下面是默认的 blank 样式

image

1
2
3
4
5
6
7
8
blank = {
chars = {
"․",
},
style = {
{ vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"), "" },
},
},

你也可以将空格设置的像是彩虹一般 🌈

screenshot
1
2
3
4
5
6
7
8
9
10
11
12
blank = {
enable = true,
chars = {
" ",
},
style = {
{ bg = "#434437" },
{ bg = "#2f4440" },
{ bg = "#433054" },
{ bg = "#284251" },
},
},

image

1
2
3
4
5
6
7
8
9
10
indent = {
chars = {
"․",
},
style = {
{ vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"), "" },
"#806d9c",
"#c06f98",
},
}

你也可以设置多种字符类型

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
indent = {
chars = {
"․",
"⁚",
"⁖",
"⁘",
"⁙",
},
style = {
"#666666",
"#555555",
"#444444",
},
}

最后,他还可以设置背景颜色

1
2
3
4
5
6
7
8
9
10
blank = {
enable = true,
chars = {
" ",
},
style = {
{ bg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("cursorline")), "bg", "gui") },
{ bg = "", fg = "" },
},
}

chunk

chunk 用来做什么

这个 mod 可以用来指示当前光标所在的一个 chunk(比如 function_declaration,if_statement)等。并且提供了 textobject 方便你快速的操作这个 chunk。

配置项

该 mod 的默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
local default_conf = {
priority = 15,
style = {
{ fg = "#806d9c" },
{ fg = "#c21f30" },
},
use_treesitter = true,
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "╭",
left_bottom = "╰",
right_arrow = ">",
},
textobject = "",
max_file_size = 1024 * 1024,
error_sign = true,
}

独有的配置项为 use_treesittercharstextobjectmax_file_sizeerror_sign

  • use_treesitter 是用来控制是否使用 treesitter 来高亮代码块,默认为 true。 如果该项被设置为 true,他是通过自底向上的查找树的节点,直至找到匹配的节点类型,以此获取相应的 chunk 范围的。而如果设置为 false,将使用 vim 的 searchpair 来查找最近的相邻大括号来推断位置(也因此导致 Python 等脚本语言无法正常使用该 mod)

  • chars 是一个表,其中的字符用来指示用哪些字符来渲染 chunk,这个表中包含五个部分

    • horizontal_line
    • vertical_line
    • left_top
    • left_bottom
    • right_arrow
  • textobject 是一个字符串,默认没有值。他用来表示想要用哪些字符来表示 textobject,比如我使用的就是 ic,意为 inner chunk,你也可以修改为其他顺手的字符

  • max_file_size 是一个数字,默认为 1MB,当打开的文件大小超过这个值时,将自动关闭该 mod

  • error_sign 是一个布尔值,默认为 true,如果你使用 treesitter 来高亮代码块,当遇到错误的代码块时,它将会把 chunk 的颜色设置为枫叶红(或者你想要的其他颜色),要启用这个选项,style 应该有两个颜色, 默认的 style 为

    1
    2
    3
    4
    style = {
    "#806d9c", -- 紫罗兰色
    "#c21f30", -- 枫叶红色
    },

对于通用的配置(在 README 中有提到),仅有部分需要特别注意:

  • style 是一个字符串或者 Lua 表。如果是字符串,必须是一个 RGB 十六进制字符串。如果是一个表,接收一到两个表示十六进制颜色的字符串,如果只有一个颜色,那么只会使用一个颜色来渲染 chunk,如果有两个颜色,那么会使用两个颜色来渲染 chunk,第一个颜色用来渲染正常的 chunk,第二个颜色用来渲染错误的 chunk。

除此之外,还可以使用这样的配置来动态的切换 chunk 的颜色,这是为了解决这个 issue

1
2
3
4
5
6
7
8
9
10
11
12
13
local cb = function()
if vim.g.colors_name == "tokyonight" then
return "#806d9c"
else
return "#00ffff"
end
end
chunk = {
style = {
{ fg = cb },
{ fg = "#f35336" },
},
},

example

下面是默认的 chunk 样式

image

他的配置方式为

1
2
3
4
5
6
7
8
9
10
chunk = {
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "╭",
left_bottom = "╰",
right_arrow = ">",
},
style = "#806d9c",
},

你可以按照下面的配置来使你的样式看起来像是 GIF 里演示的那样

image

1
2
3
4
5
6
7
8
9
10
chunk = {
chars = {
horizontal_line = "─",
vertical_line = "│",
left_top = "┌",
left_bottom = "└",
right_arrow = "─",
},
style = "#00ffff",
},

indent

indent 用来做什么

我们写代码有时候会遇到嵌套很多层等情况,而为了确定某些代码是否在同一层级,我们需要缩进线来帮助定位。

配置项

该 mod 的默认配置如下:

1
2
3
4
5
6
7
local default_conf = {
priority = 10,
style = { vim.api.nvim_get_hl(0, { name = "Whitespace" }) },
use_treesitter = false,
chars = { "│" },
ahead_lines = 5,
}

独有的配置为 use_treesittercharsahead_lines

  • use_treesitter 是用来控制是否使用 treesitter 来判断 indent 的层数,默认为 false(因为性能问题)。如果你对缩进的精确要求很高,你可以尝试设置为 true,详情见这个 issue

  • chars 是一个表,其中的字符用来指示用什么字符来渲染 indent line,你可以尝试设置为下面这样:

    1
    2
    3
    4
    5
    6
    chars = {
    "│",
    "¦",
    "┆",
    "┊",
    },

实际渲染的时候,第一个层级会采用第一个字符,第二个层级会采用第二个字符,以此类推,如果层级超过了你设置的字符数,那么会循环使用这些字符。

  • ahead_lines 是一个数字,用来控制缩进线超前查看和渲染范围,默认为 5

和 chunk 一样,我们需要额外注意 style 这个通用配置:

  • 这里的 style 是一个 RGB 字符串或者一个表。如果是字符串,那么所有的缩进线将会采用这一种颜色来渲染,如果是表,可以有这两种写法:

    1
    2
    3
    4
    5
    style = {
    "#FF0000",
    "#FF7F00",
    "..."
    },

    或者

    1
    2
    3
    4
    5
    style = {
    { bg = "#FF0000", fg = "#FFFFFF" },
    { bg = "#FF7F00", fg = "FF7F00" },
    -- ...
    },

    如果你设置了背景颜色,那么缩进线将会采用背景颜色来渲染。

example

下面是默认的 indent 样式

image

1
2
3
4
5
6
7
8
indent = {
chars = {
"│",
},
style = {
vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"),
},
}

你也可以将缩进线设置的像是彩虹一般 🌈

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
indent = {
chars = {
"│",
},
style = {
"#FF0000",
"#FF7F00",
"#FFFF00",
"#00FF00",
"#00FFFF",
"#0000FF",
"#8B00FF",
},
}

你也可以设置多种字符类型

image

1
2
3
4
5
6
7
8
9
10
11
indent = {
chars = {
"│",
"¦",
"┆",
"┊",
},
style = {
vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui"),
},
}

如果你喜欢更粗的显示效果,你可以设置渲染的背景颜色

image

1
2
3
4
5
6
7
8
9
10
11
indent = {
enable = true,
use_treesitter = false,
chars = {
" ",
},
style = {
{ bg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID("Whitespace")), "fg", "gui") },
},
exclude_filetype = exclude_ft,
}

line_num

line_num 用来做什么

其实他和 chunk 的功能相同,只是可能有些人不喜欢 chunk,偏好高亮行号的形式,因此有了这个 mod

配置项

该 mod 的默认配置如下:

1
2
3
4
5
local default_conf = {
style = "#806d9c",
priority = 10,
use_treesitter = false,
}

独有的配置项为 use_treesitter,用法和 chunk 的该项一样,详情见 chunk

和 chunk 一样,我们需要额外注意 style 这个通用配置:他只接收一个字符串,表示十六进制颜色,来表示行号的颜色

example

下面是默认的 line_num 样式

image

1
2
3
line_num = {
style = "#806d9c",
},
未来还会添加更多有意思的样式…… 如果你有好的想法,非常欢迎来提建议 😊

一直使用vim-latex 作为编写LaTeX文件的主力,但是虽然之前设置好了Alt键,但是一直用的较少,今天试用了一下Alt相关智能键,特别好用,查阅手册后将这部分使用规则记录下来。

开启Alt键

~/.local/share/nvim/lazy/vim-latex/ftplugin/tex.vim
1
2
let g:Tex_AdvancedMath = 1
set winaltkeys=no

由于我使用的是neovim, 所以设置了上述路径,如果您使用vim请找到对应路径设置即可。缺省时,如果某菜单对应了热键<key>,那么在 Vim 中按Alt-<key> 将使得屏幕焦点转移到菜单栏(menu bar)上。如果因此而产生了冲突,那么需要在$VIM/ftplugin/tex.vim 文件中设置set winaltkeys=no,以使用这些Alt 键相关的宏映射。 ,而我们一般没有这个需要,所以放心开启Alt键即可。

Alt键映射

Alt-L

这是一个多态的、插入模式下的宏映射,根据处于光标之前的字符展开为下列形式之一。光标之前的字符 展开

光标前的字符 替换为相应字符
( 或 ) \left(<++>\right)
[ 或 ] \left[<++>\right]
| \left|<++>\right|
{ \left{<++>\right}
< 或 > \langle<++>\rangle
q \lefteqn{<++>}<++>
其他 \label{<++>}

Alt-B

此插入模式宏映射将前一个字符包括进\mathbf{}中。

Alt-C

插入模式下,该键的多态性如下所示:

  1. 如果前一个字符是一个字母或数字,那么将它转为大写并将其包括进\mathcal{}
  2. 否则插入\cite{}

在可视模式下,它简单地将所选部分包括进\mathcal{}

Alt-I

此宏映射根据光标包括在哪个环境中在光标处插入\item 命令。\item 命令的风格(style)取决于包括它的环境。缺省时,Alt-I 为下列环境定义了风格:

Environment Stle
itemize \item
enumerate \item
theindex \item
thebibliography \item[<+biblabel+>]{<+bibkey+>} <++>
description \item[<+label+>] <++>

Alt-I拥有智能处理嵌套环境的能力。

HEU KMS Activator是知彼而知己开发的KMS激活工具,最新版增加了OEM激活功能,支持Vista/Win7/Server 2008/2012等系统的永久激活,无需联网即可一键激活Windows和Office VL版本。新增Win10数字许可证激活,可用于系统封装后完美激活。此工具无广告、无捆绑、无后门,完全出自“知彼而知己”的正版,适合系统封装爱好者使用。

HEU KMS Activator

注意:高级功能的按钮以“灰色”图标显示,建议详细阅读《用户使用手册》后再行使用。

数字许可证激活简介

  1. Windows10可以通过Windows 7 / 8.1升级、购买的零售版、或OEM等的方式激活,微软会收集计算机的硬件信息并上传到服务器,将其转化为数字许可证,下次重装系统时,联网后微软服务器将重新比对硬件信息,若主要硬件信息不变,系统就会自动予以激活。

  2. 例如已永久激活的Windows7升级到Windows10后,会自动永久激活,基于这种思路,通过从微软服务器获取数字门票(GenuineTicket.xml),完成数字许可证激活(又名数字权利激活)。

  3. 综上,数字许可证激活的方式必须连接到互联网,一旦激活成功,以后重装系统联网后即自动永久激活。

假如使用软件永久激活了Windows7,目前来看,升级到Windows10后会自动激活。此时这台计算机就已经获取到了“数字许可证”,不需要任何其他软件,也不需要安装密钥,只要以后在这台计算机上安装Windows10,联网自动激活。数字许可证激活方式,微软只需一个系统更新即可轻易封杀,然而为了扩大Windows10的市场占有率,此方式被默许。

KMS 激活简介

  1. 通常企业、学校等拥有多台计算机,设想如果安装了 Windows,然后管理员一台一台的去激活,管理起来十分不方便。为了解决这种问题,微软定制了一种 批量授权(Volume)的方法:局域网内的一台计算机作为服务器首先连接到微软的服务器进行激活,然后局域网内的其他计算机向局域网内的这台服务器请求激 活。这种方法即为 Key Management Service,简称 KMS,是微软定制的一种正规 激活方式,下面简要介绍一下激活流程。

  2. 大客户首先购买微软正版“CSVLK”密钥,然后将一台计算机永久激活(联网 或者拨打微软客服电话),这台计算机即可作为服务器(KMS Host),始终保持 开机联网(局域网连接通畅即可)的状态。局域网内的其他计算机(KMS Client)向服务器请求激活,当达到一定数量(激活 Windows 需要 25 台计算机、激活 Office 需要 5 台计算机)的客户端计算机请求激活后,服务器就向客户端注入激 活信息。

  3. KMS 激活后有效期 180 天。默认设置下 KMS Client 会自动向可用的 KMS Host 请求激活(未激活的客户端尝试连接 KMS 的时间间隔为 2 小时,已激活的 客户端尝试连接 KMS 的续订时间间隔为 7 天)。即 KMS Client 激活有效期会始 终保持 173 天以上,前提是 KMS Host 是可用的。

下载地址