最近刷视频总是刷到热辣滚烫的相关内容,趁着假日就来看看咯,确实挺不错:
剧中杜乐莹总是毫无保留地对朋友真心付出,即便是知道对方有私心在,仍然坚持按照内心想法去做,确实难能可贵。
短短两小时的电影,看到主角为了自己的梦想所做出的改变,和所坚持的,有些汗颜,似乎我也快忘记了自己的梦想。
大概一周多之前,登录 Github 网页版时候总是提示要启用两步验证。 因为比较忙,也没太在意,就点了忽略。等到最近两天,直接是不让登录了,必须要启用两步验证才可以登录。 着急要处理事情,结果不让登录,手上也没有能进行两步验证的工具。
这样的体验让我感到非常的暴躁。 本着一向不喜欢受制于乱七八糟规则的原则,决定把项目和仓库转移出去。 对于我来说,GitHub 也好,Gitlab 也好,仅仅是一个存储版本控制仓库的地方, 实在难以理解这类平台总喜欢折腾出各种花俏功能做什么。
也正式这个原因,让我决定把仓库转移到 Gitlab,因为我还保留有原 Github 账号的 ssh 密钥。 因此可以在本地继续推送代码,于是清空了仓库,并备注了对应的 Gitlab 的仓库地址。
Gitlab 也提供了类似于 Github page 的功能,
只不过他的自定义域名管理非常让人不爽,
逻辑居然是重定向到项目的固定域名。于是,每次访问 spacevim.org
时,都给我重定向到
https://spacevim-spacevim-c3011a6b21af70a6e8848d17c11652755bdad5d4e36c3.gitlab.io/
经过多次尝试后,果断放弃了。
因为域名在 Cloudflare 上,并且该平台也提供了静态网站构建的功能,因此,没必要舍近求远,直接使用 cloudflare page,并且把本站及 SpaceVim 的官网也一并移过来。
在构建本站时候,一直遇到一个错误:
Liquid Exception: incompatible character encodings: ASCII-8BIT and UTF-8
谷歌搜了一堆答案,要么是在 default.html 内增加 <meta charset="utf-8" />
, 要么是在 _config.yml
里面增加 encoding: utf-8
。尝试下来都不行。
感谢 vimzh 群友依云提供的答案,在构建时,增加环境变量:export LANG=C.UTF-8
大概一个多月以前,我看到过这样一篇文字《几款流行拼音输入法的“用户体验”评测(Win)》。 而我自己手机上一直使用的是华为版的百度输入法,虽然我不知道这个输入法到底会上传哪些内容,但是个人感觉还是不安全,因为打字输入涉及的东西太多。 聊天信息、密码等等,这些内容不应该存储在不可控的服务器上。
于是,我找到了这样一款手机输入法 fcitx5-android。Fcitx 的旧全名是“Free Chinese Input Tool of X”的首字母缩写,相信大家并不陌生,它是 Linux 系统下面一款开源、免费的输入法框架。早期我在使用 Ubuntu/ArchLinux 时候都是使用的这款输入法。 非常开心有人将这一输入法移植到了安卓平台。
fcitx5-android
的安装方式也比较简单,可以直接从 F-Droid
网站直接下载 APK 安装包。切记,根据自己的手机选择对应的 CPU 架构,一般手机都是 arm64-v8a
。
目前 fcitx5-android
只支持全键盘输入模式,恰巧我也是习惯于全键盘输入,因此使用倒是没有任何障碍。而我比较看重的功能特点主要包括:
fcitx5-android
不要求联网权限,也不收集任何个人信息。这一点是我切换该输入法的最核心原因,因为日常输入涉及的内容还是比较多的,因此对于哪些动辄上传收集输入信息的输入法还是比较反感的。
一些键盘的操作习惯也是可以设置的。比如:
更多功能就不一一罗列了,可以自行安装后打开配置界面查看。
在主题设置界面,可以设置按键按下的水波纹特效,以及是否显示按键边框,甚至按键的横向边距、纵向边距、圆角半径都可以设置。
文件树插件也是我日常非常常用的插件之一。先前尝试过 nvim-tree,今天晚上花了一晚上时间测试了下 Neo-tree.nvim,测试版本为:Neo-tree.nvim@e3b4ef0。 总的来说体验不是很好。
测试环境:
我的插件系统比较简单,直接下载 neo-tree.zip 至 bundle 文件夹,并手动更新 RTP。
参考 readme 上的介绍,直接完整复制默认配置,修改几个重要的配置,比如宽度、位置、自动关闭窗口等待。
1、设置 Neo-tree 的初始化路径失败;
我给 SpaceVim 增加了这个插件的支持,目前有一个快捷键SPC b t
无法实现。按照文档所说:Neotree dir=%:p:h
无效,打开后根目录任然是当前目录。
2、设置快捷键不是很方便;
在配置文件里,action 都是一些预设值的 string。
3、SPC f o
快捷键每次弹窗需要确认是否切换目录。
我是经常会同时编辑不同的 git 仓库文件,SPC f o
设置为打开文件树并定位到当前文件位置,即为 :Neotree reveal
,但是每次一旦切换不同项目时都会弹窗提示:
File is not in cmd, change to xxxxx
y/n
而且使用的是 insert 模式,我需要按下 y<Cr>
两下按键,应该提供一个设置选项,自动切换目录而不需要用户手动确认。并且,就算确认,完全可以使用 getchar()
函数。
当然了,这个插件也不是完全没有优势,个人感觉优势在:
1、支持多种 source,比如 buffers、git status 等,后续如果有机会,看看是否支持自定义。
2、git 状态的更新,使用的是异步函数,这点比 defx-git 要好一些,后者是我目前使用 defx 的一个痛点。
最后,暂时还是切换回 defx
,期待 neo-tree 新的改进,后续有机会再尝试。
在接触 Neovim 之前,我的主力编辑器一直是 Vim。在 Vim 增加 +job
特性之前,
Vim 的所有函数都是在主线程内完成的,当执行某个需要很长时间的操作时,Vim 会卡住等待上一个操作完成。
这样的体验是非常不符合个人习惯的。因此,Geoff Greer 给 Vim 提交过异步执行的补丁,源码可以查阅Floobits/vim。同时,Thiago Padilha 也给 Vim 提交过类似的补丁,但是都因各种原因被拒绝,其实这也是我不太喜欢的一个 Vim 开发的弊端。
后来,Thiago Padilha 发起了 Neovim 项目,做了如下改进:
虽然,以上的一些功能 Vim 后续也增加了,但是部分功能却是用了另外一种完全不兼容的方式。
Neovim 的异步 job 特性主要是提供了一个异步执行外部命令的函数。并且通过回调函数来响应输出的结果。比如:
call jobstart(['echo'])
Neovim 增加了一个定时器功能,主要涉及函数为 timer_start()
,其函数原型为:
timer_start({time}, {callback} [, {options}])
以往 Vim 支持垂直、水平分屏,而分屏时窗口的布局、屏幕内容都会发生改变。悬浮窗口提供了一种在不改变当前窗口布局的前提下,打开额外的窗口以展示新的内容。
Neovim 和 Vim 的分屏又是完全不一样的函数。因此我写了一个函数,来统一调用 Neovim 或者 Vim 的悬浮窗口。
if has('nvim')
let s:FLOAT = SpaceVim#api#import('neovim#floating')
else
let s:FLOAT = SpaceVim#api#import('vim#floating')
endif
call s:FLOAT.open_win(bufnr('%'), v:true,
\ {
\ 'relative': 'editor',
\ 'width' : &columns,
\ 'height' : &lines * 30 / 100,
\ 'row': 0,
\ 'col': &lines - (&lines * 30 / 100) - 2
\ })
可以通过 :terminal
命令打开内置终端。在终端窗口内,可以使用 Ctrl-\ Ctrl-n
切换到 Normal 模式。
目前,内置的:terminal
命令不支持分屏模式,可以借助split-term.vim插件。
该插件增加了如下的使用方式:
优化内置终端的插件有很多种:
虽然这些插件都挺不错的,但是个人感觉没有必要那么复杂。目前,就个人而言,我仅仅使用了 Neovim 的悬浮窗口配合 termopen 函数。
let s:SYSTEM = SpaceVim#api#import('system')
let s:FLOAT = SpaceVim#api#import('neovim#floating')
let s:WIN = SpaceVim#api#import('vim#window')
function! s:open_default_shell(open_with_file_cwd) abort
if a:open_with_file_cwd
if getwinvar(winnr(), '&buftype') ==# 'terminal'
let path = getbufvar(winbufnr(winnr()), '_spacevim_shell_cwd', SpaceVim#plugins#projectmanager#current_root())
else
let path = expand('%:p:h')
endif
else
let path = SpaceVim#plugins#projectmanager#current_root()
" if the current file is not in a project, the projectmanager return empty
" string. Then use current directory as default cwd.
if empty(path)
let path = getcwd()
endif
endif
" look for already opened terminal windows
let windows = []
windo call add(windows, winnr())
for window in windows
if getwinvar(window, '&buftype') ==# 'terminal'
exe window . 'wincmd w'
if getbufvar(winbufnr(window), '_spacevim_shell_cwd') ==# l:path
" startinsert do not work in gvim
if has('nvim')
startinsert
else
normal! a
endif
return
else
" the opened terminal window is not the one we want.
" close it, we're gonna open a new terminal window with the given l:path
exe 'wincmd c'
break
endif
endif
endfor
if s:default_position ==# 'float' && exists('*nvim_open_win')
let s:term_win_id = s:FLOAT.open_win(bufnr('%'), v:true,
\ {
\ 'relative': 'editor',
\ 'width' : &columns,
\ 'height' : &lines * s:default_height / 100,
\ 'row': 0,
\ 'col': &lines - (&lines * s:default_height / 100) - 2
\ })
exe win_id2win(s:term_win_id) . 'wincmd w'
else
" no terminal window found. Open a new window
let cmd = s:default_position ==# 'float' ?
\ 'topleft split' :
\ s:default_position ==# 'top' ?
\ 'topleft split' :
\ s:default_position ==# 'bottom' ?
\ 'botright split' :
\ s:default_position ==# 'right' ?
\ 'rightbelow vsplit' : 'leftabove vsplit'
exe cmd
let lines = &lines * s:default_height / 100
if lines < winheight(0) && (s:default_position ==# 'top' || s:default_position ==# 'bottom')
exe 'resize ' . lines
endif
endif
let w:shell_layer_win = 1
for open_terminal in s:open_terminals_buffers
if bufexists(open_terminal)
if getbufvar(open_terminal, '_spacevim_shell_cwd') ==# l:path
exe 'silent b' . open_terminal
" clear the message
if has('nvim')
startinsert
else
normal! a
endif
return
endif
else
" remove closed buffer from list
call remove(s:open_terminals_buffers, 0)
endif
endfor
" no terminal window with l:path as cwd has been found, let's open one
if s:default_shell ==# 'terminal'
if exists(':terminal')
if has('nvim')
if s:SYSTEM.isWindows
let shell = empty($SHELL) ? 'cmd.exe' : $SHELL
else
let shell = empty($SHELL) ? 'bash' : $SHELL
endif
enew
call termopen(shell, {'cwd': l:path})
" @bug cursor is not cleared when open terminal windows.
" in neovim-qt when using :terminal to open a shell windows, the orgin
" cursor position will be highlighted. switch to normal mode and back
" is to clear the highlight.
" This seem a bug of neovim-qt in windows.
"
" cc @equalsraf
if s:SYSTEM.isWindows && has('nvim')
stopinsert
startinsert
endif
let s:term_buf_nr = bufnr('%')
call extend(s:shell_cached_br, {getcwd() : s:term_buf_nr})
else
" handle vim terminal
if s:SYSTEM.isWindows
let shell = empty($SHELL) ? 'cmd.exe' : $SHELL
else
let shell = empty($SHELL) ? 'bash' : $SHELL
endif
let s:term_buf_nr = term_start(shell, {'cwd': l:path, 'curwin' : 1, 'term_finish' : 'close'})
endif
call add(s:open_terminals_buffers, s:term_buf_nr)
let b:_spacevim_shell = shell
let b:_spacevim_shell_cwd = l:path
" use WinEnter autocmd to update statusline
doautocmd WinEnter
setlocal nobuflisted nonumber norelativenumber
" use q to hide terminal buffer in vim, if vimcompatible mode is not
" enabled, and smart quit is on.
if !empty(g:spacevim_windows_smartclose) && !g:spacevim_vimcompatible
exe 'nnoremap <buffer><silent> ' . g:spacevim_windows_smartclose . ' :hide<CR>'
endif
startinsert
else
echo ':terminal is not supported in this version'
endif
elseif s:default_shell ==# 'VimShell'
VimShell
imap <buffer> <C-d> exit<esc><Plug>(vimshell_enter)
endif
endfunction
上周,听到一则让我很吃惊的消息。陈浩(左耳朵耗子)因突发心梗辞世,享年只有四十七岁。 正常情况下,四十多岁正是事业、家庭黄金时间。当财富、声望都积累足够的时候,却没有时间去享受自己奋斗的果实,确实让人觉得惋惜。
其实,对于左耳朵耗子了解的并不多,甚至可以说完全不了解。这几天,不管是朋友圈,还是推特,抑或是订阅的一些博客,都在发文纪念他。 也正是读了这些文字才有了一些了解。其实,这类事情之前已经遇到过好几次了。比如:司徒正美。
想来,真的是健康是一,财富、声望、家庭等等一切都是零。
也正是因此,最近才开始关注一些生活习惯方面的资料。包括不限于:
1、早餐:以往有时候因为熬夜,第二天早上起来的较晚,会错过酒店的早餐时间。又或者是因为早上赶时间,早餐只是应付式地吃一点,甚至是来不及吃。
给自己定一个闹铃,每天早餐预留充足时间
2、夜宵:拒绝夜宵,晚上9点后,不再进食
睡眠时间一直是一个大问题,应该是自15年之后,每天睡觉几乎都是11点半到12点半甚至1点。
想控制到10点之前,似乎是不现实的,后面尽量控制在11点-7点半,保证至少8小时睡眠。
貌似没有什么适合自己的运动了。以前偶尔还去爬山,上次去宜兴竹海,只到半山腰就下来了。