BNU-FZH

fengzhenhua@outlook.com

在学会使用GitLab写博客之后,一直工作良好,但是今天发现仓库越来越大,编写博客时速度也越来越慢,原因在于每次commit后git都会形成一个快照,于是除了必备的Hexo部分外这个.git文件夹也是变的越来越大,这个才是导致仓库变大的主要原因,而作为写博客来讲,我是不需要使用commit切换回某个状态的,于是决定重置一下仓库。

  1. 创建新分支

    1
    git checkout --orphan latest

    使用--orpha选择,可创建1个无任何提交历史的清洁分支。新分支可以随意命名,但不要与以前的名冲突,只是网上乱七八糟的文章都相互抄袭,使用master而己,这是github的默认命名,而gitlab的默认名就是main.

  2. 添加所有文件

    1
    2
    3
    git add . 
    or
    git add -A

  3. commit代码

    1
    git commit -m "重置仓库"

  4. 删除原来的主分支(main)

    1
    git branch -D main

  5. 将当前分支重命名为main

    1
    git branch -m main

  6. 推送代码到远程仓库

    1
    2
    git branch --set-upstream-to=origin/main main
    git push -f origin main

    注意:默认gitlab开启了main分支保护,不允许强制push, 此时需要在远程仓库项目时暂时把项目保护关闭才能推送。关闭项目保护的方法: SettingsRepositoryProtected Branches , 在强推成功后一定要重新添加分支受保护。

  7. 从远程拉取新代码(测试之用)

    1
    git pull
    如果别人pull不下来,可以执行
    1
    git pull -r

  8. 确定清除历史记录的结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看提交日志
    git log --pretty=oneline
    # 查看分支信息
    # 列出所有本地分支
    $ git branch
    # 列出所有远程分支
    $ git branch -r
    # 列出所有本地分支和远程分支
    # $ git branch -a

    # 查看 tag 信息
    # 查看本地标签
    git tag
    # 查看远程标签
    git ls-remote --tags

LaTeX 大型文档通常使用多文件方法用于组织项目文件,以方便快速定位、修改。一般来说,建议使用subfiles宏包来组织多文件的大型文档,简单易用。 standalone宏包则可以用来编制会议论文集,每篇文章都使用独立的导言区,以避免自定义命令冲突。

subfiles宏包

主文件

主文件与普通LaTeX差不多。只是需要引用subfiles宏包,使用subfile命令导入子文件。

main.tex 主文件
1
2
3
4
5
6
7
8
9
10
11
12
13
\documentclass{main}
\usepackage{subfiles} % 尽量置于导言区的最后
\graphicspath{{contents/images/}}

\title{文档标题}
\author{作者}
\date{}

\begin{document}
\maketitle
\subfile{contents/chp-01} % 导入第一章
\subfile{contents/chp-02} % 导入第二章
\end{document}
阅读全文 »

在使用vimnvim编译latex文件时,对于单个源文件,自然使用vim-latex插件足够应对,但是对于一个多合一文件,比如说一本书,这里会有一个主文件,然后各个章节分开来写,但是每次写一部分后都要切换到主文件编译,然后再回到当前章节文件编辑,这显然是十分低效率的。于是研究使用一键编译,在多合一文件时能够直接编译主文件,设计思路是:

  1. 建立一个文件夹,. 例如:特殊函数/特殊函数.tex

  2. 绑定'F10'映射到编译命令,使用shell命令截取文件夹的名称,也就获得了主文件的名称,进而直接编译就可以了,文件夹内的其他子文件就不用再管了。

  3. 映射设置,位于'~/.config/nvim/lua/plg/vim-latex.lua`中,相关部分设置为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    --绑定快捷键
    vim.api.nvim_create_autocmd("FileType",{
    pattern = "tex",
    callback = function()
    -- 配置F4打开模板
    vim.api.nvim_set_keymap("n", "<F4>", ":TTemplate<CR>", {noremap = true, silent = true})
    -- 配置pdflatex编译,原vim-latex中使用\ll 默认 xelatex 编译
    vim.api.nvim_set_keymap("n", "<F6>", [[<cmd>!pdflatex % <CR>]], {noremap = true, silent = true})
    -- 配置F8编译 aux辅助文件,直接根据数据库生成文献引用, 注意使用%:t:r 截取文件名
    vim.api.nvim_set_keymap("n", "<F8>", [[<cmd>!bibtex %:t:r.aux <CR>]], {noremap = true, silent = true})
    -- 配置F10编译多合一文件时,以当前目录名为主文件,以节省时间
    vim.api.nvim_set_keymap("n", "<F10>", [[<cmd>!xelatex $(echo $PWD|awk -F"/" '{print $NF}').tex <CR>]], {noremap = true, silent = true})
    end
    })

  4. 多合一文件的结构参考

    特殊函数
    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
    \documentclass[a4paper,fontset = windows]{ctexbook}
    \usepackage{xeCJKfntef}
    \usepackage[svgnames]{xcolor}
    \usepackage[margin=2cm]{geometry}
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    \usepackage{float}
    \usepackage{amsfonts}
    \usepackage{amssymb}
    \usepackage{mathtools}
    \usepackage{amsthm}
    \usepackage{amsmath}
    \usepackage{physics}
    \usepackage{multicol}
    \usepackage{lineno}
    %\usepackage{mathpazo}
    \usepackage[
    pdfborder=0 0 0,
    bookmarksnumbered=true
    ]{hyperref}
    \usepackage[user=teacher]{cexam}
    \usepackage{colornote}
    \usepackage[fontwarning=off]{ctrlwarning}
    \usepackage{pgfplots}
    \pgfplotsset{compat=1.18}
    %\usepackage{doc}
    %\usepackage{draftwatermark}
    %\SetWatermarkText{冯振华}
    \includeonly{
    Gamma函数,
    Reimannζ函数,
    常系数线性微分方程,
    特殊函数的微分解法,
    积分变换,
    特殊函数的积分解法,
    Whittaker,
    椭圆函数,
    不等式高级水平必备,
    线性代数,
    张量分析,
    附录,
    }
    \begin{document}
    %\title{\Huge 特殊函数新解}
    %\author{ 冯振华}
    %\date{2020年12月3日}
    %\maketitle
    \input{coverpage}
    \tableofcontents
    \include{Gamma函数}
    \include{Reimannζ函数}
    \include{常系数线性微分方程}
    \include{特殊函数的微分解法}
    \include{积分变换}
    \include{特殊函数的积分解法}
    \include{Whittaker}
    \include{椭圆函数}
    \include{不等式高级水平必备}
    \include{线性代数}
    \include{张量分析}
    \include{附录}
    \end{document}

注意:在绑定到F10的编译命令中,本来应当借助于vimscript的内置变量,但是%:h返回值是当前目录的缩写., 而我需要的是和主文件同名的文件夹名,同时也没有使用shell截取字符串的方法,因为##%都被vimscript解析成它的命令用来替换,所以直接使用了awk来截截取文件夹名,从而也获得了主文件的名称。同时注意,由于使用了主文件/主文件.tex的命名方式,在多文件latex的编辑过程中,应当遵守这个规定命名。同时键位F9已经分配给了nabla插件,用来显示公式,所以此处多合一编辑分配了最后一个键位F10

在编写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.
阅读全文 »