文本编辑器 CudaText 简体中文汉化包

不久之前,我在 Windows 平台上最常用的文本编辑器还是 Notepad3 和 Notepad++ 。前者用来替换系统自带的记事本;后者用来处理一些稍微复杂,但还没有上升到需要动用专业 IDE 的文本编辑工作。最近发现新版本的 Notepad++ 会频繁卡顿,但由于拖延症和考虑到更换新软件的适应成本,就一直没有想过要换掉它。直到前几周 Notepad++ 被爆出存在多个缓冲区溢出漏洞,特别地,其中还包含了几个可以执行任意代码的高危漏洞。本来作为一个个人维护的开源项目,爆出几个漏洞来也无伤大雅。然而离谱的是,漏洞发现者早在今年四月份就向 Notepad++ 的作者报告了漏洞,但是这几个漏洞一直没有被修复。直到漏洞细节被公开的半个月后,这几个漏洞才得以修复。是时候另觅一款好用的轻量级文本编辑器了。

……

    般若波罗蜜多心经

    觀自在菩薩行深般若波羅蜜多時照見五蘊皆空
    度一切苦厄舍利子色不異空空不異色色即是空
    空即是色受想行識亦復如是舍利子是諸法空相
    不生不滅不垢不淨不增不減是故空中無色無受
    想行識無眼耳鼻舌身意無色聲香味觸法無眼界
    乃至無意識界無無明亦無無明盡乃至無老死亦
    無老死盡無苦集滅道無智亦無得以無所得故菩
    提薩埵依般若波羅蜜多故心無罣礙無罣礙故無
    有恐怖遠離顛倒夢想究竟涅槃三世諸佛依般若
    波羅蜜多故得阿耨多羅三藐三菩提故知般若波
    羅蜜多是大神咒是大明咒是無上咒是無等等咒
    能除一切苦真實不虛故說般若波羅蜜多咒即說
    咒曰揭諦揭諦波羅揭諦波羅僧揭諦菩提薩婆訶

    用 RunDLL32.exe 命令实现 xdg-open

    xdg-open 是 Linux 下的一个命令,可以调用对应的程序来打开目标文件,等同于在文件管理器中双击打开该文件。Ubuntu 用户可以通过执行 sudo apt install xdg-utils -y 来安装 xdg-open 命令,这个命令的用法也很简单:

    xdg-open { file | URL }

    遗憾的是, Windows 系统并没用提供类似的命令,不过我们可以通过 Windows 自带的 rundll32.exe 命令来实现一个类似功能的脚本。

    RunDLL32.exe 用来加载指定的 DLL 文件并调用指定的导出函数。用法如下:

    ……

    Windows 下的 GNU/Linux 命令行工具

    通常想要在 Windows 下运行 Linux 命令有以下几种选择:

    1. WSL
    2. Cygwin
    3. MinGW / MinGW-w64
    4. MSYS2

    不过以上几种方案除了要安装体量巨大(包含完整的工具链)的软件外,还需要切换到相应的运行环境才能执行 Linux 命令,无法在 Windows 命令行中直接运行。

    本文收集了一些 GNU/Linux 命令行工具,它们都可以通过 Scoop 进行安装。

    ……

    从 HeidiSQL 配置文件中找回数据库密码

    HeidiSQL 是 Windows 平台上一个开源数据库管理工具,支持 MariaDB, MySQL, SQL Server, PostgreSQL, SQLite, Interbase 和 Firebird 。HeidiSQL 使用 Delphi 编写,和其他诸如 Navicat, DBeaver 等专业数据库管理工具相比, 它更加轻量、启动和响应速度更快。

    HeidiSQL 将数据库密码加密后保存在配置文件中,不过这种加密方式非常简单。可以在 HeidiSQL 的源代码文件 source/apphelpers.pas 中找到加密和解密算法:

    ……

    通过 Starship 个性化定制 PowerShell 终端

    之前一直使用 Oh My Posh 美化终端提示符。不过 Oh My Posh 配置起来比较麻烦,就一直在使用官方提供的默认配置。然而在默认配置下, Oh My Posh 某些特性在 Windows 下体验不太友好。比如,在提示符中显示无意义的用户名;又或者当前路径过长导致输入命令换行。

    最近试用了一款名叫 Starship 的类似的软件。也许是受到其官网宣传的蛊惑,感觉 Starship 的启动速度确实要比 Oh My Posh 快那么一些。此外, Starship 的配置也要比 Oh My Posh 简单一些。因此,决定抛弃 Oh My Posh ,改用 Starship 。

    ……

    使用 Neovim 进行 Python 开发

    本文仅以 Windows 下的 LazyVim 配置环境为例。

    启用 Python 支持

    可启用 LazyVim 自带的 Python 语言插件。在 %LOCALAPPDATA%\nvim\lua\config\lazy.lua 文件中加入以下高亮代码:

    lua    -- import any extras modules here
        { import = "lazyvim.plugins.extras.lang.python" },
        -- { import = "lazyvim.plugins.extras.lang.typescript" },
        -- { import = "lazyvim.plugins.extras.lang.json" },
        -- { import = "lazyvim.plugins.extras.ui.mini-animate" },

    选择 Virtualenv

    当 Neovim 打开一个 Python 项目时,默认会加载项目根目录下的 venv 路径下的 Virtualenv 。可以使用 venv-selector.nvim 插件为当前项目选择指定的 Virtualenv 。使用命令 :VenvSelect 或者快捷键 <leader>cv 打开 Virtualenv 选择窗口。不过默认只能识别出 venv 目录中的 Virtualenv ,可以进行配置来支持其他目录名称。

    ……

    Windows 下 Neovim 的 nvim.treesitter 插件无法加载 yaml 模块

    Neovim 的插件 nvim.treesitter 无法加载 yaml 模块,错误消息为:Failed to load parser for language ‘yaml’: uv_dlopen: The specified procedure could not be found. 可以按照本文提供的方案解决该错误

    Windows 下使用 Neovim

    虽然在 Windows 下的 VSCode 用得挺好,但还是想折腾一下 Neovim 试试。Neovim 安装完毕后只是一个简陋的编辑器,需要自己配置和安装各种插件才能进行日常使用,幸好已经有很多现成的开源配置项目,像 LunarVim 、 AstroNvim 和 LazyVim 等。经过试用,发现 AstroNvim 在 Windows 上有一些未解决的 BUG ,比如一直报「 E65: Illegal back reference 」错误。 LunarVim 暂时还没机会测试。暂且选择使用 LazyVim 的配置。

    ……

    Vagrant SSH 登录要求密码

    故障现象

    日常操作系统是 Windows ,通常使用 Vagrant 来搭建本地开发环境。在某次重装系统后,像往常一样用 vagrant up --provision 命令成功地创建了开发环境,接下来用 vagrant ssh 登录系统时,竟然提示要求输入密码:

    [email protected]'s password:

    这是之前从未遇到过的问题。虽然可以用默认密码 vagrant 登录系统,但是总觉得不爽。一定要找到原因。

    排查原因

    用 vagrant ssh --debug 命令输出调试信息:

    DEBUG safe_exec: Converted - Command: `"C:\\Windows\\System32\\OpenSSH\\/ssh.EXE"` Args: `["[email protected]", "-p", "2222", "-o", "LogLevel=FATAL", "-o", "Compression=yes", "-o", "DSAAuthentication=yes", "-o", "IdentitiesOnly=yes", "-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null", "-o", "PubkeyAcceptedKeyTypes=+ssh-rsa", "-o", "HostKeyAlgorithms=+ssh-rsa", "-i", "D:/myproject/devenv/.vagrant/machines/myproject/virtualbox/private_key", "-o", "ForwardAgent=yes"]`
    [email protected]'s password:

    发现 ssh 命令确实有使用 private_key 文件来进行验证身份。但是不知道为什么失败了,转而要求输入密码。

    ……