jbwqfy.com
Open in
urlscan Pro
172.67.220.97
Public Scan
URL:
https://jbwqfy.com/
Submission: On July 23 via api from US — Scanned from DE
Submission: On July 23 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText Content
Eric's Blog 時光荏苒,歲月如梭 * 首頁 * 歸檔 * 分類 * 標簽 * 開源 * 想法 * 維基 * 相冊 * 友鏈 * 關于 * NEOVIM 调色板插件 CPICKER.NVIM 2024-07-14 Eric Wong 辅助分享 neovim * 啓用插件 * 操纵界面 * 後續計劃 由于偶然需要点窜 Neovim 的高亮,触及到色彩调剂,以往利用的是外部辅助,往返切换很是麻烦。也找了一些 Neovim/Vim 的插件,可是利用的感受确切不尽如人意。 是以,本身实现了一个精练版本的调色板插件 cpicker.nvim,該插件存儲于 SpaceVim 的 bundle/cpicker.nvim 文件夹内。 为了便利伶仃利用,手动同步更新到 wsdjeg/cpicker.nvim。 啓用插件 若是是 SpaceVim 用户,只需要启用 tools#cpicker 模块便可: [[layers]] name = 'tools#cpicker' 对非 SpaceVim 用户,可以用插件办理器安裝: Plug 'https://spacevim.org/git/repos/SpaceVim/' Plug 'wsdjeg/cpicker.nvim' 操纵界面 操纵快捷鍵: 按鍵 功能描述 h / <Left> 減小光標下的值 l / <Right> 增加光標下的值 <Enter> 複制光標下的顔色值 後續計劃 * 今朝撑持的格式包含:RGB、HSL、HSV、CMYK,計劃再增加一些经常利用的格式。 * 增加顔色同化調整面板 閱讀全文 -------------------------------------------------------------------------------- * NEOVIM 缓冲区(BUFFER)相干事务 2024-07-07 Eric Wong 學習筆記 neovim * 启事 * 獲取可用事务列表 * 事务的觸發時機 * BufAdd * BufNew * BufNewFile * 測試示例 启事 比来在利用 SpaceVim 的標簽栏(tabline)时发现,对新增的空内容的缓冲区(buffer),標簽栏上方实在不会列出。 查抄源码发现標簽栏跟踪缓冲区新增的代码只监听了:BufNewFile 跟 BufReadPost 事务。 vim.api.nvim_create_autocmd({ 'BufNewFile', 'BufReadPost' }, { callback = vim.schedule_wrap(function(event) if vim.api.nvim_buf_is_valid(event.buf) and index(right_hide_bufs, event.buf) == -1 and index(visiable_bufs, event.buf) == -1 and index(left_hide_bufs, event.buf) == -1 then table.insert(right_hide_bufs, event.buf) end end), group = tabline_augroup, }) 測試發現 :enew 号令及 :new 号令並不會觸發這兩個事务。点窜源碼增加監聽 BufNew 事务。 固然题目是修复了,可是我感觉有需要清算下缓冲区相干事务的觸發時機。 獲取可用事务列表 可利用号令 :echo getcompletion('Buf', 'event') 快速查看当前 Neovim 版本撑持的缓冲区事务列表。 事务的觸發時機 BUFADD 1. 新增一個緩沖區至緩沖區列表 2. 将一个 unlisted 缓冲区添加进 listed 缓冲区列表 3. 点窜 listed 缓冲区列表中某个缓冲区的名称 BUFNEW 1. 新增一個緩沖區 2. 点窜緩沖區的名稱 BUFNEWFILE 1. 當開始編輯一個不存在的文件時 測試示例 通過一些實例來測試事务觸發的時機,測試代碼以下: 需要忽视掉落 *Cmd 事务,避免文件讀寫掉敗。 local log = require("spacevim.logger").derive("logevent") local group = vim.api.nvim_create_augroup("logevent", { clear = true }) vim.api.nvim_create_autocmd( vim.tbl_filter(function(e) return not vim.endswith(e, "Cmd") end, vim.fn.getcompletion("Buf", "event")), { callback = vim.schedule_wrap(function(event) log.debug(event.event .. event.buf) end), group = group, } ) 1. 執行号令::new [ logevent ] [13:20:39:562] [ Debug ] BufNew5 [ logevent ] [13:20:39:562] [ Debug ] BufAdd5 [ logevent ] [13:20:39:562] [ Debug ] BufAdd5 [ logevent ] [13:20:39:562] [ Debug ] BufLeave4 [ logevent ] [13:20:39:562] [ Debug ] BufEnter5 [ logevent ] [13:20:39:562] [ Debug ] BufWinEnter5 1. 執行号令::enew [ logevent ] [13:22:42:452] [ Debug ] BufNew6 [ logevent ] [13:22:42:452] [ Debug ] BufAdd6 [ logevent ] [13:22:42:452] [ Debug ] BufAdd6 [ logevent ] [13:22:42:452] [ Debug ] BufLeave4 [ logevent ] [13:22:42:452] [ Debug ] BufWinLeave4 [ logevent ] [13:22:42:452] [ Debug ] BufHidden4 [ logevent ] [13:22:42:452] [ Debug ] BufEnter6 [ logevent ] [13:22:42:452] [ Debug ] BufWinEnter6 1. 執行号令: :echo bufadd('') [ logevent ] [13:47:57:482] [ Debug ] BufNew6 1. echo nvim_create_buf(v:false, v:true) [ logevent ] [14:25:06:555] [ Debug ] BufNew5 1. echo nvim_create_buf(v:true, v:true) [ logevent ] [14:26:32:389] [ Debug ] BufNew11 [ logevent ] [14:26:32:389] [ Debug ] BufAdd11 [ logevent ] [14:26:32:389] [ Debug ] BufAdd11 當打開一個文件後,執行 :set nobuflisted, 在執行 :set buflisted [ logevent ] [14:38:15:888] [ Debug ] BufDelete4 [ logevent ] [14:38:19:857] [ Debug ] BufAdd4 [ logevent ] [14:38:19:857] [ Debug ] BufAdd4 打開一個存在的文件::e README.md [ logevent ] [14:44:15:717] [ Debug ] BufNew8 [ logevent ] [14:44:15:717] [ Debug ] BufAdd8 [ logevent ] [14:44:15:717] [ Debug ] BufAdd8 [ logevent ] [14:44:15:717] [ Debug ] BufLeave4 [ logevent ] [14:44:15:717] [ Debug ] BufWinLeave4 [ logevent ] [14:44:15:717] [ Debug ] BufHidden4 [ logevent ] [14:44:15:717] [ Debug ] BufReadPre8 [ logevent ] [14:44:15:717] [ Debug ] BufReadPost8 [ logevent ] [14:44:15:717] [ Debug ] BufReadPost8 [ logevent ] [14:44:15:717] [ Debug ] BufEnter8 [ logevent ] [14:44:15:717] [ Debug ] BufWinEnter8 打開一個不存在的新文件: :e newfile.txt [ logevent ] [14:45:56:519] [ Debug ] BufNew10 [ logevent ] [14:45:56:519] [ Debug ] BufAdd10 [ logevent ] [14:45:56:519] [ Debug ] BufAdd10 [ logevent ] [14:45:56:519] [ Debug ] BufLeave4 [ logevent ] [14:45:56:519] [ Debug ] BufWinLeave4 [ logevent ] [14:45:56:519] [ Debug ] BufHidden4 [ logevent ] [14:45:56:519] [ Debug ] BufNewFile10 [ logevent ] [14:45:56:519] [ Debug ] BufEnter10 [ logevent ] [14:45:56:519] [ Debug ] BufWinEnter10 閱讀全文 -------------------------------------------------------------------------------- * (NEO)VIM 括号补全插件比较 2024-06-27 Eric Wong 辅助分享 vim neovim * 启事 * 實現邏輯及功能比較 * auto-pairs * neopairs.vim * nvim-autopairs * 維護狀態 启事 輸入模式下,成對符號的自動補全一向是比較经常利用的功能。利用了很多年 delimitMate , 根基功能正常,可是偶然会呈现卡屏现象,等一段时候或按下 ctrl-c 可以結束卡屏,可是會輸入很多個 <Plug>delimitMate( 。 可是这一现象并没有法百分百重现。 想著這麽多年過去了,會不會有新的更好用的插件,因而搜了下,今朝已知的括號補全插件有: * delimitMate * neopairs.vim:需要 exists('#CompleteDone') == 1 * nvim-autopairs:需要 Neovim 0.7.0+ * mini.pairs * auto-pairs * autoclose.nvim * ultimate-autopair.nvim 實現邏輯及功能比較 AUTO-PAIRS 仓库中 Vim 脚本只有 plugin/auto-pairs.vim (673 行)。 监听 BufEnter 事务,映照 g:AutoPairs 所設定的成對符號。 NEOPAIRS.VIM 通過監聽 CompleteDone 事务,判定补全 item 的结尾是不是匹配设定的成对符号。 NVIM-AUTOPAIRS 是利用 Lua 实现的 Neovim 插件。在 nvim-autopairs.setup 函數裏利用以下三組事务監聽來實現補全。 local group = api.nvim_create_augroup('autopairs_buf', { clear = true }) api.nvim_create_autocmd({ 'BufEnter', 'BufWinEnter' }, { --- M.on_attach }) api.nvim_create_autocmd('BufDelete', { --- }) api.nvim_create_autocmd('FileType', { --- }) 在 M.on_attach 函數裏,首要有一個 expr 映照及一個 InsertCharPre 事务監聽: local enable_insert_auto = false -- 初始化是不是插入的 flag local expr_map = function(key) api.nvim_buf_set_keymap(bufnr, 'i', key, '', { expr = true --- 设定 expr 映照 }) end for _, rule in pairs(rules) do -- 按照每个法则映照快捷键,并计较是 enable_insert_auto 值 end if enable_insert_auto then api.nvim_create_autocmd('InsertCharPre', { --- 若是 enable_insert_auto 为 true, 则监听 InsertCharPre 事务 }) end 維護狀態 repo Github stars Issues pull requests last commit auto-pairs 4.1k 138 Open / 155 Closed 27 Open / 53 Closed Feb 27, 2019 delimitMate 2k 47 Open / 219 Closed 5 Open / 36 Closed Dec 14, 2020 nvim-autopairs 3k 12 Open / 287 Closed 1 Open / 157 Closed May 20 2024 neopairs.vim 31 0 Open / 4 Closed 0 Open / 0 Closed Mar 16, 2016 mini.pairs 仓库有2个:mini.nvim、mini.pairs。 由于 mini.nvim 仓库实际上是由几十个自力插件组合而成,其 Issues 跟 pull requests 列表应对到 mini.pairs 上到底有多少,没法评估。 auto-pairs 有一个较活跃的 fork 版本LunarWatcher/auto-pairs,今朝維護狀態正常: 閱讀全文 -------------------------------------------------------------------------------- * LUA 与 VIM SCRIPT 之间函数彼此调用 2024-06-11 Eric Wong 學習筆記 neovim * 启事 * 根基兼容邏輯 * Vim Script 中调用 Lua * Lua 中调用 Vim Script 函数 启事 在利用 Neovim 之前,一向利用的是 Vim Script 写 Vim 脚本。随着 Neovim 的呈现,和 Lua 的速度上风,因而将之前写的插件利用 Lua 进行重写了。 在这里记录一些从 Vim Script 切换到 Lua 碰到的一些题目,和前后兼容的写法。 根基兼容邏輯 個人比較垂青腳本的向後兼容,在非需要的情況下,對外的接口函數不會改變,通過以下一個示例大年夜致揭示了若何做到前後版本的腳本兼容。 比如,初期的 Vim Script 脚本实现的脚本以下: autoload/test.vim function! test#test(name) echo "hello " . name endfunction 那么,对 Neovim 新版本的撑持,可利用 Lua 实现近似的功能: lua/test.lua local M = {} function M.test(name) print('hello ' .. name) end return M 为了让前面的 test.vim 利用 Lua 函数,可以做以下点窜: function! test#test(name) if has('nvim') lua require('test').test(vim.api.nvim_eval('name')) else echo "hello " . name endif endfunction 以上函數存在一個問題,就是每次調用時,都會去檢測一次版本,可以將腳本点窜爲: if has('nvim') function! test#test(name) lua require('test').test(vim.api.nvim_eval('name')) endfunction else function! test#test(name) echo "hello " . name endfunction endif 這樣一來,版本檢測僅僅在這個腳本文件被讀取載入時才執行一次,在這之後 test#test(name) 這個函數的本體僅限于一行代碼。 lua require('test').test(vim.api.nvim_eval('name')) VIM SCRIPT 中调用 LUA 上述的示例中只有一種調用编制,即便用 :lua 号令,該号令利用有兩種编制。 lua print('hello') lua << EOF print('hello') EOF 别的,利用 :lua 号令,若是碰到 Vim Script 函数本来需要有返回值的话,比较麻烦,可利用 luaeval() 函數,比如: function! test#test(name) call luaeval("require('test').test(vim.api.nvim_eval('name'))") " 也可利用 return 返回值 return luaeval("require('test').test(vim.api.nvim_eval('name'))") endfunction Neovim 0.5.0 增加了 v:lua,可以加倍便利地在 Vim Script 中调用 Lua, 示例以下: function! test#test(name) " 这里可以直接利用参数,而不需要利用 nvim_eval return v:lua.require('test').test(a:name) endfunction LUA 中调用 VIM SCRIPT 函数 Neovim 供给了 vim.fn 和 nvim_call_function(fn, argv)。 -- built-in functions vim.fn.executable(var) -- User autoload function vim.fn['test#test'](name) 对 Vim 的 funcref 变量,可利用以下编制调用: function! s:test_hello(name) endfunction let s:fn = function('s:test_hello') function! test#run(fn) if type(a:fn) == 2 let fn = string(a:fn)[10:-3] elseif type(a:fn) == type('') let fn = a:fn endif call v:lua.require('test').run(fn) endf 閱讀全文 -------------------------------------------------------------------------------- * 更新 NEOVIM 碰到的题目 2024-03-11 Eric Wong 學習筆記 neovim * 启事 * 升级 Neovim * 不兼容的改動 * vim.o.v_te 報錯 * 窗口豆割高亮 VertSplit 掉效 * treesitter 高亮報錯 * 切回穩定版 启事 由于在保护 SpaceVim 这一项目,固然我本身今朝平常利用 neovim-0.9.5,可是还有很多用户会利用 neovim-nightly 版本。 是以,升级至逐日构建版本测试 SpaceVim。 升级 NEOVIM Windows 下升级也比较简单,利用 scoop 号令便可: scoop uninstall neovim scoop install neovim-nightly 不兼容的改動 安裝后,启动一堆弊端,也做了一部分修复,commits 以下: * 2ad0da42 - perf(treesitter): add default setup function (Eric Wong 49 minutes ago) * f8b280e0 - fix(flygrep): remove `t_ve` option (Eric Wong 68 minutes ago) * c46968d5 - fix(colorscheme): link WinSeparator to VertSplit (Eric Wong 79 minutes ago) * 9ee8606e - fix(telescope): fix deoplete autocmd (Eric Wong 82 minutes ago) * 74c93c6c - chore(treesitter): update nvim-treesitter to 0.9.1 for Nvim-0.8.x (Eric Wong 2 hours ago) VIM.O.V_TE 報錯 本来,在我的代碼裏有很多通過設置 &v_te 選項來實現点窜光標的造型。可是升級到新版本後,就報以下錯誤: Error detected while processing function SpaceVim#plugins#flygrep#open: line 1: E5108: Error executing lua C:\Users\wsdjeg\.SpaceVim\/lua/spacevim/plugin/flygrep.lua:780: Unknown option 't_ve' stack traceback: [C]: in function '__index' C:\Users\wsdjeg\.SpaceVim\/lua/spacevim/plugin/flygrep.lua:780: in function 'open' [string ":lua"]:1: in main chunk 檢查了下源碼,原來是因爲執行了 vim.o.v_te,嘗試做了一些測試,增加exists()判斷,可恨的是 exists('&t_ve') 竟然返回 1。 那么就没法判定了,只能是删除这些设置。 窗口豆割高亮 VERTSPLIT 掉效 更新後,豆割窗口的豎線沒有高亮了。查了下 :hi VertSplit,輸出結果顯示高亮設置正常。看了 :h hl-VertSplit 才知道,本来豆割窗口的高亮组名称点窜了。 点窜成了 WinSeparator。是以在 ColorScheme 的 autocmd 内增加了: hi link WinSeparator VertSplit TREESITTER 高亮報錯 这是我碰到最无语的弊端。每当打开 lua 文件、help 文件 就会弹出報錯 treesitter parser 不存在。开初我觉得是 nvim-treesitter 的题目,更新并增加建设禁用所有的高亮都不可。 報錯以下: Error detected while processing function startify#open_buffers[13]..<SNR>276_open_buffer[12]..BufReadPost Autocommands for "*": Error executing lua callback: ...s\neovim-nightly\current\share\nvim\runtime\filetype.lua:30: Error executing lua: ...s\neovim-nightly\current\share\nvim\runtime\filetype.lua:31: function startify#open_buffers[13]..<SNR>276_open_buffer[12]..BufReadPost Autocommands for "*"..FileType Autocommands for "*"..function <SNR>1_LoadFTPlugin[20]..script D:\Scoop\apps\neovim-nightly\current\share\nvim\runtime\ftplugin\lua.lua: Vim(runtime):E5113: Error while calling lua chunk: ...rrent\share\nvim\runtime/lua/vim/treesitter/language.lua:104: no parser for 'lua' language, see :help treesitter-parsers stack traceback: [C]: in function 'error' ...rrent\share\nvim\runtime/lua/vim/treesitter/language.lua:104: in function 'add' ...t\share\nvim\runtime/lua/vim/treesitter/languagetree.lua:112: in function 'new' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:41: in function '_create_parser' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:108: in function 'get_parser' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:416: in function 'start' ...ovim-nightly\current\share\nvim\runtime\ftplugin\lua.lua:2: in main chunk 執行 :help treesitter-parsers 一样報錯,理解为打开 help 文件也報錯,同只執行 :h。 Error detected while processing modelines[274]..FileType Autocommands for "*"..function <SNR>1_LoadFTPlugin[20]..script D:\Scoop\apps\neovim-nightly\current\share\nvim\runtime\ftplugin\help.lua: E5113: Error while calling lua chunk: ...rrent\share\nvim\runtime/lua/vim/treesitter/language.lua:104: no parser for 'vimdoc' language, see :help treesitter-parsers stack traceback: [C]: in function 'error' ...rrent\share\nvim\runtime/lua/vim/treesitter/language.lua:104: in function 'add' ...t\share\nvim\runtime/lua/vim/treesitter/languagetree.lua:112: in function 'new' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:41: in function '_create_parser' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:108: in function 'get_parser' ...ightly\current\share\nvim\runtime/lua/vim/treesitter.lua:416: in function 'start' ...vim-nightly\current\share\nvim\runtime\ftplugin\help.lua:2: in main chunk 因而,禁用 SpaceVim 的 treesitter 模块,任然報錯。查看了 neovim-nightly 的源码,发现,本来在这几个文件里面默许增加了:vim.treesitter.start() * D:\Scoop\apps\neovim-nightly\current\share\nvim\runtime\ftplugin\help.lua * D:/Scoop/apps/neovim-nightly/0.10.0-2559/share/nvim/runtime/ftplugin/lua.lua * 等等,懶得去一個個搜了。 執行 cat D:/Scoop/apps/neovim-nightly/0.10.0-2559/share/nvim/runtime/ftplugin/lua.lua, 发现就两行代码,也没有任何条件判定跟 error handle。 -- use treesitter over syntax vim.treesitter.start() 切回穩定版 說實話,沒空去這樣試錯。 scoop uninstall neovim-nightly scoop install neovim nvim --version NVIM v0.9.5 Build type: RelWithDebInfo LuaJIT 2.1.1703942320 Compilation: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe /MD /Zi /O2 /Ob1 -W3 -wd4311 -wd4146 -DUNIT_TESTING -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN32_WINNT=0x0602 -DMSWIN -DINCLUDE_GENERATED_DECLARATIONS -ID:/a/neovim/neovim/.deps/usr/include/luajit-2.1 -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/build/src/nvim/auto -ID:/a/neovim/neovim/build/include -ID:/a/neovim/neovim/build/cmake.config -ID:/a/neovim/neovim/src -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include -ID:/a/neovim/neovim/.deps/usr/include system vimrc file: "$VIM\sysinit.vim" fall-back for $VIM: "C:/Program Files (x86)/nvim/share/nvim" Run :checkhealth for more info 閱讀全文 -------------------------------------------------------------------------------- * 修复 GIT CLONE 题目: GNUTLS_HANDSHAKE() FAILED 2024-02-23 Eric Wong 學習筆記 git * 前因 * 嘗試診斷 * 从头編譯 前因 今天在 wsl 内将 ~/.SpaceVim 倉庫的遠程地址設置成 https://spacevim.org/git/repos/SpaceVim/ 后,再執行 git pull 出現錯誤: fatal: unable to access 'https://spacevim.org/git/repos/SpaceVim/': gnutls_handshake() failed: Error in the pull function. 可是,恢复成 github 或 gitlab 仓库地址后,就又可以執行 git pull 了。 嘗試診斷 執行以下号令,看看收集链接到底如何回事: GIT_CURL_VERBOSE=1 git pull 輸出爲: 23:29:04.865626 http.c:664 == Info: Couldn't find host spacevim.org in the (nil) file; using defaults 23:29:04.884061 http.c:664 == Info: Trying 104.21.53.107:443... 23:29:05.085433 http.c:664 == Info: Trying 2606:4700:3037::ac43:d405:443... 23:29:05.085549 http.c:664 == Info: Immediate connect fail for 2606:4700:3037::ac43:d405: Network is unreachable 23:29:05.085601 http.c:664 == Info: Trying 2606:4700:3032::6815:356b:443... 23:29:05.085623 http.c:664 == Info: Immediate connect fail for 2606:4700:3032::6815:356b: Network is unreachable 23:29:05.118268 http.c:664 == Info: Connected to spacevim.org (104.21.53.107) port 443 (#0) 23:29:05.138108 http.c:664 == Info: found 372 certificates in /etc/ssl/certs 23:29:05.138186 http.c:664 == Info: GnuTLS ciphers: NORMAL:-ARCFOUR-128:-CTYPE-ALL:+CTYPE-X509:-VERS-SSL3.0 23:29:05.138223 http.c:664 == Info: ALPN, offering h2 23:29:05.138240 http.c:664 == Info: ALPN, offering http/1.1 23:29:05.149601 http.c:664 == Info: gnutls_handshake() failed: Error in the pull function. 23:29:05.149680 http.c:664 == Info: Closing connection 0 fatal: unable to access 'https://spacevim.org/git/repos/SpaceVim/': gnutls_handshake() failed: Error in the pull function. 从头編譯 刪除已有 git: sudo apt uninstall git 下载 git 源码 wget "https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz" tar -xvf git-2.9.5.tar.xz 安裝依賴 sudo apt-get update sudo apt-get install curl jq -y sudo apt-get install build-essential autoconf dh-autoreconf -y sudo apt-get install libcurl4-openssl-dev gettext -y 編譯 make configure ./configure --prefix=/usr --with-openssl make -j4 安裝 sudo make install 閱讀全文 -------------------------------------------------------------------------------- 1/17 最新發布 * Neovim 调色板插件 cpicker.nvim * Neovim 缓冲区(buffer)相干事务 * (Neo)Vim 括号补全插件比较 * Lua 与 Vim Script 之间函数彼此调用 * 更新 Neovim 碰到的题目 * 修复 git clone 题目: gnutls_handshake() failed * 《熱辣滾燙》觀後感 * 从 Github 迁徙到 Gitlab * 很是棒的安卓输入法 fcitx-android * Neo-tree.nvim 糟的体验 分類 * 生活隨筆 24 * 學習筆記 63 * 辅助分享 10 * 工作資料 2 標簽云 回憶 lisp 高中 vim 蘇大年夜 java lua love ruby spacevim blog ecl movie rust zig nodejs winrar neovim gallery life lifestyle fcitx gitlab git xxfseo.com