BNU-FZH

fengzhenhua@outlook.com

在编写vim或nvim配置文件时需要用到当前目录和文件名,所以此罗列出来:

符号 表示
% 当前完整的文件名
%:h 文件名的头部,即文件目录.例如../path/test.c就会为../path
%:t 文件名的尾部.例如../path/test.c就会为test.c
%:r 无扩展名的文件名.例如../path/test就会成为test
%:e 扩展名
%:t:r.aux 文件名.aux
各种效果
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
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim": >
:p /home/mool/vim/src/version.c
:p:. src/version.c
:p:~ ~/vim/src/version.c
:h src
:p:h /home/mool/vim/src
:p:h:h /home/mool/vim
:t version.c
:p:t version.c
:r src/version
:p:r /home/mool/vim/src/version
:t:r version
:e c
:s?version?main? src/main.c
:s?version?main?:p /home/mool/vim/src/main.c
:p:gs?/?\\? \home\mool\vim\src\version.c

Examples, when the file name is "src/version.c.gz": >
:p /home/mool/vim/src/version.c.gz
:e gz
:e:e c.gz
:e:e:e c.gz
:e:e:r c
:r src/version.c
:r:e c
:r:r src/version
:r:r:r src/versio

近期重装了ArchLinux,但是又遇到KDE Plasma5桌面环境下无法挂载Windows所在硬盘问题,具体是什么原因造成的尚不明确,但是百度之后找到了解决方法:

1
sudo ntfsfix -d /dev/nvme0n1p6

注意:第一条命令需要加参数-d, 按好多资料没有加-d修复无效。原因参考资料:Mounting ntfs partition by ntfs3 failed

Check your dmesg for errors with ntfs3. Chances are the volume is still marked dirty, and ntfs3 will not mount a partition where that is the case without the force option. ntfsfix without any arguments will actively set the dirty bit, so that a chkdsk from Windows can do a real check/analysis. If you don't have that handy and want to clear the dirty bit despite ntfsfix not being entirely a good checking tool you can pass the -d argument to ntfsfix.

如果你一直在使用 Arch Linux 或其他基于 Arch 的发行版,如 Manjaro,那么可能会遇到 AUR。你尝试安装新软件,有人建议从 AUR 中安装它。这让你感到困惑。什么是 AUR?为什么使用它?如何使用 AUR?我将在本文中回答这些问题。

什么是 AUR?

AUR 表示 Arch 用户仓库(Arch User Repository)。它是针对基于 Arch 的 Linux 发行版用户的社区驱动的仓库。它包含名为 PKGBUILD 的包描述,它可让你使用 makepkg 从源代码编译软件包,然后通过 pacman(Arch Linux 中的软件包管理器)安装。

阅读全文 »

使用Linux过程中最频繁的命令就是路径跳转cd, 但是它需要输入完整的路径,显然是一个麻烦的工作,然后我们有几个工具可以解决快速路径跳转的问题,它们分别是:fasdautojumpz.shzsh-z-gitz.lua 。其中前两个可以使用pacman安装,而zsh-z-git是以z.sh构建的,z.lua是国人实现的,后面这三个使用paruaur源中安装,我试用了zsh-z-git感觉良好。通过文章一个会学习你习惯的 cd 命令 - z.lua 获知这几个zsh插件中z.lua的性能最快,比z.sh快三倍,比fasd/autojump快十倍以上,于是决定删除zsh-z-git安装z.lua

安装和配置z.lua

  1. 安装z.lua

    1
    paru --skipreview --needed --noconfirm -S z.lua

  2. 配置启用z.lua

    ~/.zshrc
    1
    2
    3
    source /usr/share/z.lua/z.lua.plugin.zsh
    or
    eval "$(lua /usr/share/z.lua/z.lua --init zsh enhanced once)"

注意:启用z.lua作用上述两种方法都可以,第一种方法比较符合zsh的要求,而第二种方法是官网给出的方法,这里我使用了第二种方法,因为官方文件中还有一名话:

Options like "enhanced", "once" and "fzf" can be used after --init too.

因为它可以增加选项,所以我采用了官方的方法, 具体使用方法见下面参考文章。

参考文章

正确的解决方法:

关闭KDE Plasma5 文件索引!

  • 使用命令关闭
    1
    2
    3
    balooctl disable
    balooctl suspend
    balooctl status

第一条命令是,第二条命令是, 而我在ArchLinux中直接sudo kill掉进程也是立杆见影!第三条命令是

  • 通过点击系统设置搜索文件搜索去掉启用文件索引前的对号→右下角应用

  • 如果不想停用,可以编辑 ~/.config/baloofilerc ,在里面添加exclude folders一项来忽略某些目录,加速baloo index速度。

关闭Gnome3文件索引

  • 使用gsettings禁用tracker-miner应用

    1
    2
    gsettings set org.freedesktop.Tracker.Miner.Files crawling-interval -2
    gsettings set org.freedesktop.Tracker.Miner.Files enable-monitors false
    同时删除旧数据tracker reset --hard

  • 或者禁止tracker-*软件启动

    1
    2
    3
    sudo sed -i "s/X-GNOME-Autostart-enabled=true/X-GNOME-Autostart-enabled=false/g" /etc/xdg/autostart/tracker-*.desktop
    tracker reset --hard
    tracker reset --hard

问题分析说明

通过命令ps aux查看了一下系统进程情况,发现是一个叫baloo_file_extractor 的进程占用了以上的CPU资源,怪不得CPU一直产热,风扇一直转个不停呢,然后sudko kill它,大约2秒钟系统就安静了。这是一个什么东西? 参看Baloo-ArchWiki, 原来这是一个索引程序,它一直在扫描文件建立索引,所以即使等它运行完,如果再有文件变化,那它照样会消耗掉大量资源! 这让我想起来,原来使用Gnome3的时候,也遇到类似的问题,我知道刚装好的系统要索引,所以就一直等他索引完成,尽管后面的使用过程中会有风扇转,我一直误以为是驱动不兼容导致的!但是当前的Linux版本足够新根本不存在兼容问题。在使用过程中,大家都知道自己的文件放在哪里,很少使用搜索功能,所以直接关闭就是最佳的解决方案。


我的电脑Thinkpad T490, 当配置完ArchLinux后,发现系统确实足够流畅,但是发现只使用电池的情况下电脑很安静,只要接能电源风扇就会一直转个不停,噪音很大,不能让人静下心来工作。排查问题时,发现一般笔记本电脑默认开启了睿频加速技术(Turbo Boost), 也就是说CPU本身是有一个基准频率的,但是开启睿频后会提高CPU的速度,但是带来的问题却是风扇一直不停的转,产生了噪音,现在的笔记本基准频率已经够用了,所以默认的开启睿频反倒不是一个最佳的选择。于是打开高级电源管理工具TLP-UI, 左侧选中处理器, 然后在右侧找到CPU_BOOST, 选中两项CPU_BOOST_ON_ACCPU_BOOST_ON_BAT并关闭,然后输入root密码就可以了。同时对比其他的项,将AC电源的项改成与BAT一样的设置,这样电脑就足够安静了。这里我修改的项还有:CPU_ENGERGY_PERF_POLICY_ON_ACbalance_power , CPU_MAX_PERF_ON_AC99, CPU_MAX_PERF_ON_BAT30, 关闭CPU_HWP_DYN_BOOST_ON_AC_ID_TITLE, PLATFORM_PROFILE_ON_AC_ID_TITLElow-power, 于是基本和电源模式和电池模式就一样了,实际测试电脑也确实安静的工作了。

注意:最初在BIOS中关闭了超线程Hyper-Threading Technology, 这实际上就是虚拟内核,关闭后硬件显示4核,打开后发现是8核,其与电脑发热量没有最直接关系,同时也尝试关闭了动态节能技术Intel SpeedStep, 但是都没有解决因发热风扇一直转的问题。最终确定,这个睿频才是导致发热的元凶,关闭之后对于平时的工作也没有什么影响。

英特尔® 睿频加速技术的工作原理是什么?

CPU 并不总是需要以最大频率运行。有些程序更依赖内存来平稳运行,而另一些则属于 CPU 密集型。英特尔® 睿频加速技术就是用来解决这种不平衡问题的节能方案:它允许 CPU 在处理轻负载时以基本时钟速度运行,而在处理高负载时提升至更高的时钟速度。

以低时钟速率(处理器每秒执行的周期数)运行可以让处理器的功耗更低,从而减少热量,并对笔记本电脑的电池寿命产生积极影响。但是当需要更高的速度时,英特尔® 睿频加速技术会动态地提高时钟速率来进行补偿。这有时称为“算法超频”。

英特尔® 睿频加速技术可以在安全温度和功率限制内,将 CPU 速度提升到最高睿频。这样就可以提升单线程和多线程应用程序(利用多个处理器内核的程序)的性能。

如果您想知道如何启用睿频技术,不要担心 —— 它被设置为默认启用。您无需下载或配置任何东西。

什么是最大睿频?

处理轻负荷时,CPU 以其规格中列出的基本频率运行。(在使用节能英特尔SpeedStep® 技术调节 CPU 速度时,频率会更低。) 在处理标记为高性能的硬件线程时,英特尔® 睿频加速技术可将时钟速度提高到最大睿频。

例如,英特尔® 酷睿™ i9-9900K 处理器的基本频率为 3.60 GHz,最大睿频为 5.00 GHz。需要注意的是,根据所处情况,特定的CPU可能不会总是达到其最大睿频。速度的动态提升会根据工作负载和可用的热余量而变化。

在比较 CPU 时钟速度时,最大睿频是通常要记住的关键数字。它反映了处理器在超频前的峰值性能。1除了内核数和高级功能外,这也是选购 CPU 时要考虑的重点因素之一。

Windows用户关闭睿频请参考:

在使用vim或neovim编辑文件时,需要经常在插入模式和编辑模式来回切换,之前已经记录了方法,但本文作为一个正式的版本记录一下,并随ArchLinux的更新相应改变。

源自Fcitx5-ArchWiki的方法

1
2
3
let fcitx5state=system("fcitx5-remote")
autocmd InsertLeave * :silent let fcitx5state=system("fcitx5-remote")[0] | silent !fcitx5-remote -c
autocmd InsertEnter * :silent if fcitx5state == 2 | call system("fcitx5-remote -o") | endif

注意:vim将上述代码添加到~/.vimrc, neovim将上述代码添加到~/.config/nvim/init.vim

使用插件fcitx.vim

由于不同的插件管理器多少有差异,此处不记录详细配置,请将lilydjwg/fcitx.vim放入到配置文件对应位置即可。插件和官方的脚本区别在于:

ArchLinux官方脚本可以实现在一个文件中输入法的切换,即按Esc后切换为英文输入法,再切换到插入模式后Fcitx5自动切换为刚才输入时的输入法。这个功能基本满足大家的要求。插件fcitx.vim的优势在于可以记录不同文件的输入法状态,例如有两个文件A和B, 编辑文件A时插入模式使用中文输入,编辑文件B时插入模式使用英文输入,在A或B按Esc后统一转换成了英文输入法,但是在A文件中插入时Fcitx5就切换到中文输入法,在B文件中插入时Fcitx5就切换到英文输入法。

由于ArchLinux脚本仅是一段简单代码,基本上不占用启动时间,所以vim或nvim都启动的很快,而插件fcitx.vim虽然功能强大,但是需要借助于python3python-dbus,所以启动会慢一些,使用Lazy插件管理器,在nvim启动时发现插件fcitx.vim占用了90ms左右的时间,它是所有插件中占用时间最多的,其他的插件最多也就几秒.

由于同时编辑两种文本一个为中文另一个为英文的概率很小,从性能和实现简易程度上讲优先考虑使用Fcitx5-ArchWiki所提供的脚本,如果您在工作中经常处理多个文件,且这多个文件分别使用不同语言,需要分别记录不同的输入状态,那请使用插件fcitx.vim.

Keep and restore fcitx state for each buffer separately when leaving/re-entering insert mode or search mode. Like always typing English in normal mode, but Chinese in insert mode.

D-Bus only works with the same user so this won't work with sudo vim. See the fcitx5-server branch for an experimental implementation that supports sudo vim.

By default, it use python3 and D-Bus to toggle IME state. If you set g:fcitx5_remote to the executable path of fcitx5-remote BEFORE loading the plugin, it will use fcitx5-remote instead of python and D-Bus. In this case, python3 support is optional.

Usually fcitx5-remote mode is way faster to start up since Python script need quite some time for the initial load if you don't use any other plugins that load Python. The Python version will be faster while switching.

Base requirements:

  • fcitx 5

Requirements for Python mode (g:fcitx5_remote is not set):

  • Vim with Python 3 compiled in
  • The python-dbus package

Requirements for fcitx5-remote mode (g:fcitx5_remote is set):

  • fcitx5-remote

If you are using fcitx5-rime (which has its own state), let g:fcitx5_rime = 1 in your .vimrc.

The FcitxCurrentIM() function can be used to get current IM's name.

Links:

Warning:

  1. If you use Vim in terminal, to avoid the Esc delay, please set 'ttimeoutlen' to 100 or some other value. And check screen's maptimeout or tmux's escape-time option if you use it too.

在离开或重新进入插入模式或搜索模式时自动记录和恢复每个缓冲区各自的输入法状态,以便在普通模式下始终是英文输入模式,切换回插入模式时恢复离开前的输入法输入模式。

D-Bus 只在同一用户时有效,所以使用 sudo vim 时本代码就失效了。在 fcitx5-server 分支有一个实验性的版本支持 sudo vim 的用法。

本插件默认会使用 Python 3 并通过 D-Bus 来切换输入法状态。 但如果你在加载插件之前设置了 g:fcitx5_remote 为你已安装的 fcitx5-remote 可执行文件的路径,那么本插件会使用它来切换输入法状态;此模式下本插件并不需要 Python。

如果你没有其他使用 Python 的 Vim 插件,本插件的 Python 模式初始化可能会显著拖慢启动时间;而 fcitx5-remote 模式则没有这个问题。Python 模式会在切换时更快。

基本要求:

  • fcitx 5

使用 Python 模式的要求(未设置 g:fcitx5_remote):

  • 带有 Python 3 支持的 Vim
  • python-dbus 包

使用 fcitx5-remote 模式的要求(需设置 g:fcitx5_remote):

  • fcitx5-remote

如果使用 fcitx5-rime(它自己有输入状态),在 .vimrc 中设置 let g:fcitx5_rime = 1

FcitxCurrentIM() 函数可以用于获取当前输入法的名字。

链接:

注意事项:

  1. 终端下请设置 Vim 'ttimeoutlen' 选项为较小值(如100),否则退出插入模式时会有较严重的延迟。同样会造成延迟的还有 screen 的 maptimeout 选项以及 tmux 的 escape-time 选项。
  2. 请在 fcitx5-configtool 中确认英语是第一个输入法,中文是第二个输入法,rime 用户可能需要设置 g:fcitx5_rime = 1

其他插件替代方案

注意:由于这些插件我并没有一一测试,所以请大家自行决定如何选择使用。

今天本想解决Neovim自动化配置脚本编写问题,意外得知Packer已经不再维护,其官方仓库packer.nvim 写到:

This repository is currently unmaintained. For the time being (as of August, 2023), it is recommended to use one of the following plugin managers instead:

  • lazy.nvim: Most stable and maintained plugin manager for Nvim.
  • pckr.nvim: Spiritual successor of packer.nvim. Functional but not as stable as lazy.nvim.
阅读全文 »

vim-templates是一款相当好用的vim插件,同时支持neovim, 当使用vimneovim建立文件时,此插件会导入预先设置模板,这大大提高了工作效率。虽然默认配置了好多的模板,但都是一些通用模板,于是就需要自己定义模板,在定义模板的过程中一些变量的引用是重要的内容。本文从官方网站: tibabit/vim-templatesREADME.md文件中截取相关变量部分,以方便编写模板之用。同时也可以在安装插件后,使用命令::help template.txt调出使用细节。

Customization

Creating your own templates

  • Create a file <template_name>.template inside a folder which is searched by the plugin( see below), e.g. if you want to create a template file for a c++ main file you can name it cppmain.template or cppm.template
  • Open the file and edit, for example
阅读全文 »

在创建备份文件时,有些文件需要加密保存,这时使用命令加密文件就显得必不可少,当使用的时候运行脚本过程再解压,但是要求输入密码,而密码是掌握在作者手中的,所以确保了隐私安全。

使用ZIP压缩和解压

  1. 命令中直接输入密码

    1
    zip -rP yourpassword package.zip package

  2. 交互分步输入密码

    1
    zip -re package.zip package

  3. ZIP解压缩

    1
    unzip package.zip 

使用TAR压缩和解压

  1. TAR加密压缩

    1
    tar -zcvf - ./package | openssl des3 -salt -k yourpassword | dd of=meiyou.tar.gz

  2. TAR解压缩

    1
    dd if=meiyou.tar.gz | openssl des3 -d -k yourpassword |tar zxf -

Zsh(Z-shell)是一款用于交互式使用的shell,也可以作为脚本解释器来使用。它包含了bash,ksh,tcsh等其他shell中许多优秀功能,也拥有诸多自身特色。

zsh有一款语法高亮插件zsh-syntax-highlighting, 它可以为zsh添加色彩高亮,是一款必备插件,但是今天我又发现一款比它更优秀的插件fast-syntax-highlighting, 其自带有多款高亮主题,且可以自由切换。

安装插件

fast-syntax-highlighting
1
paru -S fast-syntax-highlighting-git

启用插件

~/.zshrc
1
2
# source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh

配置插件

  • 列出可用的主题

    1
    fast-theme -l

  • 切换主题

    1
    fast-theme -t theme-name

插件zsh-syntax-highlightingfast-syntax-highlighting可以同时安装,并不冲突,但是在.zshrc配置文件中应当选择其中一个.