0%

我的 vim/neovim config

 
vim

前言,老實說呢,我很懶得寫這篇,因為之前的電腦 win 10 跑 wsl or cmder 基本上都很順,
但跑到 win 7 上就很靈異,先是 cmder 顯示錯誤,安裝 cygwin 顯示也是不正確,我看 git for windows 好像顯示就沒問題,為了讓工作順暢特別研究了這篇 @__@!

windows 對照 vim 快速操作技巧

最近又回來用 windows 覺得賭爛 , 筆記一下操作 , 應該還要寫個 emacs 的方式才對畢竟 terminal 常常用 , 有空再搞
ctrl + z 復原 u
ctrl + y 復原前的狀態 ctrl + r
ctrl + g 移動到行號 :5
ctrl + ← 往左移動一整個單字 b
ctrl + → 往右移動一整個單字 w
ctrl + shift + ← 往左選取一整個單字 vb
ctrl + shift + → 往右選取一整個單字 ve
home 移動到行頭 ^
end 移動到行尾 $
shift + home 目前位置選到行頭 v^
shift + end 目前位置選到行尾 v$
ctrl + backspace 刪除一個單字 , 中文的話就是刪除到空白為止 daw
ctrl + home 移動到文件最頂端 gg
ctrl + end 移動到文件最尾端 G
ctrl + ↑ 往上捲 ctrl + e
ctrl + ↓ 往下捲 ctrl + y
ctrl + shift + ↑ 將此行往上移動 :m-2
ctrl + shift + ↓ 將此行往下移動 :m+1

windows 對照 terminal 快速操作技巧

end 往前刪除一個字 ctrl + h
delete 刪除目前游標的字 ctrl + d

往左移動一個字 ctrl + b
往右移動一個字 ctrl + f

ctrl + ← 往左移動一個單字 alt + b
ctrl + → 往右移動一個單字 alt + f

ctrl + shift + ← + delete or ctrl + backspace 往左刪除一個單字 ctrl + w
ctrl + shift + → + delete or ctrl + → + backspace 往右刪除一個單字 alt + d

shift + end + delete 刪除目前游標之後的所有字 ctrl + k
home + shift + end + delete 刪除整行 ctrl + a ctrl + k

home 移動到開頭 ctrl + a
end 移動到結尾 ctrl + e

ctrl + l 清除畫面

安裝 oh-my-bash

算是無腦安裝 oh-my-bash

1
2
cd $HOME
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"

預設會幫你蓋 .bashrc 我想要啟動時也直接啟動,所以把 .bashrc 裡面的設定直接複製到 .bash_profile , 若沒有這兩個檔案可以自己手動建立
注意他這邊用 powerline 當作樣式的話會一直跳出要你用 admin 的視窗,暫時無解先用 OSH_THEME=”agnoster”

Git bash for windows 設定 vim

在 git bash for windows 底下輸入以下命令

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

搞定後會在 ~/.vim 目錄底下多出 autoload , plugged 資料夾跟 neovim 有點不太一樣

要 config vim 的設定檔則在以下路徑
C:\Program Files\Git\etc\vimrc

安裝 :PlugInstall
萬一出現 airline missing comma 錯誤,調整以下修正即可

1
2
3
~\.vim\plugged\vim-airline\autoload\airline\extensions\tabline\buffers.vim

let s:number_map = { '0' : 0 , '1' : 1 , '2' : 2 , '3' : 3 , 4 : '4' , 5 : '5' , 6 : '6' , 7 : '7' , 8 : '8' , 9 : '9' }

解決 git bash for windows python 輸出有問題

nodejs 應該也會有這種類似的狀況,解法就是要用 winpty 把 windows 的 exe 指令給包一層 參考不錯的說明
後來想說裝個 nvim 會支援 python3 , 結果在 windows 底下就算用 winpty 包起來也是沒有真色支援,頭很痛

1
2
3
4
5
6
cd ~
vim ~/.bashrc
#加入內容
alias python='winpty python'
alias pip='winpty pip'
source ~/.bashrc

check vim support python

這個 python support 在 git for windows 的 vim 底下一定是沒 support 的,又雷得不要不要的

1
2
3
4
vim --version | grep "+python"
:echo has('python3')
:echo has('python')
return 1 即可

解決 vim 編輯檔案時忘了加上 sudo 造成 readonly 的問題

這問題困擾滿久的 , 有時候編輯一堆內容才發現忘了加 sudo , 今天無意中看到老外說明
可以執行以下指令 , 就搞定啦

1
:w !sudo tee %

Narrow to region

最近無意中發現 emacs 大師說過的 Narrow to region vim 版 , 就抓來用看看 , 發現還滿有用的

安裝

安裝老樣子在 init.vim or vimrc 加上這行

1
Plug 'chrisbra/nrrwrgn'

接著

1
:PlugInstall

複習 split window

要用 narrow to region 需要些 split window 基本知識才好用 , 我平時不太常用 split window 功能所以複習下
切換 focus split window ctrl + w + w
移動 focus split window 上下左右 ctrl + w + h/j/k/l 注意是小寫
移動 split window ctrl + w + H/J/K/L 注意是大寫

操作

裝好以後先把想要變成 Narrow to region 的部分選起來 , 也就是進入到 visual mode , 然後輸入 :NR
他會用 split window 多開一個分割視窗 , 我不太喜歡上下的分割方式 , 所以調整 ctrl + w + H

詳細操作如下 , 可以看他 github
:NR - Open the selected region in a new narrowed window
以 narrow to region 開啟目前所選的內容

:NW - Open the current visual window in a new narrowed window
在 narrow to region 的視窗新開一個 narrow to region 視窗 (當小部分修改的時候可以用這個)

:WR - (In the narrowed window) write the changes back to the original buffer.
寫入 narrow to region 的內容至原本的文件

:NRV - Open the narrowed window for the region that was last visually selected.
將最後一個選取內容於 narrow to region 中開啟

:NUD - (In a unified diff) open the selected diff in 2 Narrowed windows
不太清楚這個作用 , 沒詳細研究

:NRP - Mark a region for a Multi narrowed window
將這段選取內容變成 Multi narrowed window
這個用法應該是當某兩個區塊互相有影響的時候 , 可以開這個模式一次看到
(當同時有上下內容需要一起改的時候可以用這個功能)

:NRM - Create a new Multi narrowed window (after :NRP) - experimental!
將變成 Multi narrowed window 的視窗一起顯示在一個 buffer 內讓你編輯 (要先有執行 :NRP 指令才能用)
(當同時有上下內容需要一起改的時候可以用這個功能)

大概可以這樣用 , 假設有個片段長這樣 , 想要修改 id 為 header , footer 的內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div id="header" class="container">
<div class="row">
<div class="col-md-4">col</div>
<div class="col-md-4">col</div>
<div class="col-md-4">col</div>
</div>
</div>

<div id="mid" class="container">
<div class="row">
<div class="col-md-6">col</div>
<div class="col-md-6">col</div>
</div>
</div>

<div id="footer" class="container">
<div class="row">
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
</div>
</div>

他會給你 header 及 footer 片端像是這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- Start NrrwRgn1 buffer: .\bootstrap4.html -->
<div id="header" class="container">
<div class="row">
<div class="col-md-4">col</div>
<div class="col-md-4">col</div>
<div class="col-md-4">col</div>
</div>
</div>
<!-- End NrrwRgn1 buffer: .\bootstrap4.html -->

<!-- Start NrrwRgn2 buffer: .\bootstrap4.html -->
<div id="footer" class="container">
<div class="row">
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
<div class="col-md-3">col</div>
</div>
</div>
<!-- End NrrwRgn2 buffer: .\bootstrap4.html -->

這時候就可以下 replace 命令把 col 內容換成 xxxx 之類的操作 , 然後不會動到中間 id 為 mid 的內容
:%s/>col</>xxxx<

:NRS - Enable Syncing the buffer content back (default on)

:NRN - Disable Syncing the buffer content back

:NRL - Reselect the last selected region and open it again in a narrowed window
不太清楚這個作用 , 沒詳細研究

Tmux 安裝

萬事起頭難,參考還不錯的大陸人設定
無意中還發現還不錯的教學

1
2
3
4
5
6
git clone https://github.com/xnng/bash.git
cd bash
explorer .
分別複製
tmux/bin 底下所有檔案到 C:\Program Files\Git\usr\bin
tmux/share 底下所有檔案到 C:\Program Files\Git\usr\share

應該也可以直接下 command 不過需要 windows admin 權限,可以安裝 gsudo

在 $HOME 底下新增以下 .tmux.conf 檔案參考自
最關鍵 => 啟動真色,否則在 vim 底下會失去顏色參考自印度仔
tmux.conf

1
2
set -g default-terminal "xterm-256color"
set -ga terminal-overrides ",*256col*:Tc"

vimrc

1
2
3
if (has("termguicolors"))
set termguicolors
endif

Bash for Windows tmux vim 中文亂碼設定及真色設定

在 git bash for windows 開啟 options => text => Locale zh_TW => Character set UTF-8
Window => UI Language => Windows language
Terminal => Type => xterm-256 color
cursor 變粗 => options => looks => cursor => Block

萬一遇到簡體中文造成亂碼可在 vimrc 加入以下內容

1
2
3
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set enc=utf8
set fencs=utf8,gbk,gb2312,gb18030

最終 vim 設定檔

注意如果是用 git bash for windows 這些要放在預設的那段下面,另外 utf8 要註解掉

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
" 注意如果是用 git bash for windows 這些要放在預設的那段下面
call plug#begin('~/.vim/plugged')

" Plug 'joshdick/onedark.vim'
" Plug 'iCyMind/NeoSolarized'

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" 佈景主題
Plug 'ayu-theme/ayu-vim'

" 檔案樹
Plug 'scrooloose/nerdtree'

" 會亂碼
" Plug 'ryanoasis/vim-devicons'

" emmet
Plug 'mattn/emmet-vim'

" 註解外掛
Plug 'tpope/vim-commentary'

" 快速替換開頭結尾
Plug 'tpope/vim-surround'

" 多重游標
Plug 'mg979/vim-visual-multi', {'branch': 'master'}

" 縮排線
" 無效?
" Plug 'Yggdroot/indentLine'

" 縮排線
Plug 'nathanaelkane/vim-indent-guides'

" Error
" live server
" Plug 'turbio/bracey.vim'

" css 顏色
Plug 'ap/vim-css-color'

" 自動括號
Plug 'jiangmiao/auto-pairs'



call plug#end()

" 設定編碼
set encoding=UTF-8

set fileformat=unix

" 行號
set nu
set relativenumber

" 剪貼設定
set clipboard=unnamed

" 設定cursor顏色
" set cursorcolumn
" set cursorline

" tab寬度
syntax enable
set smartindent
set tabstop=4
set shiftwidth=4
" set expandtab

" 設定字體
" set guifont=Fira\ Code:h12

" ariline
" 開啟tab樣式
let g:airline#extensions#tabline#enabled = 1


" 設定NERDTree
nnoremap <silent> <C-k><C-B> :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" 設定 emmet
"
let g:user_emmet_install_global = 0
autocmd FileType html,css EmmetInstall
imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")

" 設定縮排顏色
" let g:indentLine_setColors = 0
" let g:indentLine_color_term = 239
" let g:indentLine_char_list = ['|', '¦', '┆', '┊']

" 設定縮排第二種
let g:indent_guides_enable_on_vim_startup = 1
hi IndentGuidesOdd ctermbg=white
hi IndentGuidesEven ctermbg=lightgrey

" 設定自動括號
let g:AutoPairsFlyMode = 1

" 設定佈景主題
set termguicolors " enable true colors support
let ayucolor="light" " for light version of theme
" let ayucolor="mirage" " for mirage version of theme
" let ayucolor="dark" " for dark version of theme
colorscheme ayu"
"
" tmux true color
if (has("termguicolors"))
set termguicolors
endif

"esc
inoremap ,, <Esc>
nnoremap ,, <Esc>
map ,so :so ~/.vimrc <CR>

最終 Tmux 設定

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
63
64
65
66
67
68
69
70
71
### rebind hotkey

# prefix setting (screen-like)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# reload config without killing server
bind R source-file ~/.tmux.conf \; display-message "Config reloaded..."

# "|" splits the current window vertically, and "-" splits it horizontally
unbind %
bind | split-window -h
bind - split-window -v

# Pane navigation (vim-like)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Pane resizing
bind -r Left resize-pane -L 4
bind -r Down resize-pane -D 4
bind -r Up resize-pane -U 4
bind -r Right resize-pane -R 4


### other optimization

# set the shell you like (zsh, "which zsh" to find the path)
# set -g default-command /bin/zsh
# set -g default-shell /bin/zsh

# use UTF8
#set -g utf8
#set-window-option -g utf8 on

# display things in 256 colors
set -g default-terminal "screen-256color"
#set -g default-terminal "xterm-256color"
#set -g default-terminal "xterm"

#啟動真色
set -g default-terminal "xterm-256color"
set -ga terminal-overrides ",*256col*:Tc"


# mouse is great!
set-option -g mouse on

# history size
set -g history-limit 10000

# fix delay
set -g escape-time 0

# 0 is too far
set -g base-index 1
setw -g pane-base-index 1

# stop auto renaming
setw -g automatic-rename off
set-option -g allow-rename off

# renumber windows sequentially after closing
set -g renumber-windows on

# window notifications; display activity on other window
setw -g monitor-activity on
set -g visual-activity on

後記的靈異事件

這個事件是由某天懶得貼上格式發生的直接把 set paste 寫在 .vimrc 裡面發生悲劇了 ,
本來想 remap esc , 搞了半天如果設定 paste 的話進入 insert mode 會變成 INSERT PASET
暫時找不到偷懶的解法就先不要在 .vimrc 內使用 set paste 吧

windows 底下使用 neovim

chocolatey 下載 nvim

將 vimrc 複製到以下路徑 , 並修改為 init.vim
C:\Users\YourName\AppData\Local\nvim

下載 vim-plug

1
2
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force

開啟 nvim 安裝 plugin

1
:PlugInstall

無腦的 neovim 管理版本工具

有時候 neovim 更新還滿麻煩的 , 無意中找到 bob , 乾脆就直接用它來管理版本吧
我 rust 我驕傲 , 無腦安裝

1
cargo install bob-nvim

預設路徑在此 C:\Users\YourName\AppData\Local\bob\v0.8.1\nvim-win64\bin , 記得加入到環境變數就搞定了

ubuntu 設定 vim

下載外掛管理員

1
curl -fLo ~/.vim/autoload/plug.vim --create-dirs     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

建立 .vimrc

1
2
cd ~
touch .vimrc

登入 vim 安裝外掛

1
2
vim
:PlugInstall

或是直接在 terminal vim +PlugInstall

在 root 使用者安裝

1
2
3
4
5
6
sudo -i
cd /root
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
touch .vimrc
vim
:PlugInstall

選取與移動的實用技巧

啪啪神器 matchit

vim 內建的 matchit 參考這篇
現在好像老外都用vim-matchup
老樣子無腦安裝在 vimrc 加上以下這段 , 這邊用 neovim ~/AppData/Local/nvim/init.vim

1
Plug 'andymass/vim-matchup'

打開 vim 輸入

1
:PlugInstall

他好像是會認附檔名 , 所以附檔名要正確才會生效 , 感覺比較有用的增強功能應該是 z% , 經典功能 %%% 一樣可以在頭尾快速移動
他會一直往下找 matchit 的點 , 其他還有滿多增強 , 有空在搞

往外延伸選取 vim-expand-region

可以參考這個
第一次看到這個咚咚是在 visual studio 上面 , 現在好像大多數 ide 都有預設這功能

老樣子無腦安裝在 vimrc 加上以下這段 , 這邊用 neovim ~/AppData/Local/nvim/init.vim

1
Plug 'terryma/vim-expand-region'

打開 vim 輸入

1
:PlugInstall

接著 map 成 emacs 大師教的即可 , 他官方好像還有教可以自定義 expand 的行為 , 這裡就懶得設定了

1
2
map ,xx <Plug>(expand_region_expand)
map ,zz <Plug>(expand_region_shrink)

縮排選取好幫手 vim-indent-object

可以參考這個
這個對有在寫 k8s yaml 或是 python 的人來說可以算是個半殘的福音吧? 用起來靈異靈異的

老樣子無腦安裝在 vimrc 加上以下這段 , 這邊用 neovim ~/AppData/Local/nvim/init.vim

1
Plug 'michaeljsmith/vim-indent-object'

打開 vim 輸入

1
:PlugInstall

接下來搭配這串 code 進行說明
example code

1
2
3
4
5
6
7
8
9
admin:
address:
socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 127.0.0.1, port_value: 10000 }

假設游標在 address 上 , 用 vii 可以選到以下兩行

1
2
address:
socket_address: { address: 127.0.0.1, port_value: 9901 }

假設游標在 address 上 , 用 vai 可以選到以下三行 , 另外有個細節就是要搭配 o 使用可以移動到選取的頭尾
還有就是 yaml 有 - 這個符號會造成誤判 , 所以選的時候要慎用 , python 也是相同原理 , 總之就是個半殘的選法

1
2
3
admin:
address:
socket_address: { address: 127.0.0.1, port_value: 9901 }

使用 COC 補全 k8s yaml

因為在搞 docker + k8s , 需要編輯 yaml 檔 , 直接在 linux 上面沒有 auto complete 實在太噁心了
決定找個至少能用的方法主要參考 這篇老外文章 , 之前好像沒用過 coc? 忘了?
這老外還有教學影片 真佛心
先在 vimrc or init.vim 內加入以下命令

1
2
3
4
5
" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

接著輸入以下命令安裝

1
:PlugInstall

萬一 coc 炸 error 檢查看看自己有無安裝 python , 另外好像還要裝 nodejs 不過我機器上已經有了
並且加入以下命令 參考自老外解法

1
python3 -m pip install --user --upgrade pynvim

如果是用 ubuntu 需要先安裝 nodejs , 注意 nodejs 版本要 12.12 以上 , 小心不要直接用 apt-get install 有可能安裝到舊版 , 在 ubuntu 20.04 上 default 好像是 node 10?
萬一不小心安裝舊版可以參考這個移除

1
2
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt-get install -y nodejs

安裝 coc-yaml

1
:CocInstall coc-yaml

萬一 coc 炸出這個 error 可能是 nodejs or python 沒安裝或是版本錯誤 , 請確認版本是否正確

1
client coc abnormal exit with: -1

接著照打開 CocConfig 編輯

1
:CocConfig

使用 vim 的話 coc 路徑會在如下位置 ~/.vim/coc-settings.json
windows 的 neovim 在 ~/AppData/Local/nvim/coc-settings.json
設定完應該就能動了 , 最後就可以用 ctrl + n ctrl + p 上下移動補全的 menu 不過好像 vscode 的更好用一點

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},

"yaml.schemas": {
"kubernetes": "/*.yaml"
}

}

安裝 zsh oh-my-zsh 及 powerline

參考 oh-my-zsh 官網

1
2
3
sudo apt-get install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sudo apt install powerline fonts-powerline

在 ubuntu 內挑選佈景

1
2
3
4
5
6
7
8
9
10
vim ~/.zshrc

#比較不花俏的預設佈景
#ZSH_THEME="darkblood"

#dracula
#ZSH_THEME="dracula"

#重新載入
source ~/.zshrc

因為 git for windows 上面預設的布景 dracula 用習慣了 , 所以就安裝看看
不得不說這個作者還滿屌的 , 各種 ide editor 都有 dracula 的布景
第一次用滿陌生的 , 我這邊手動安裝 , clone 以後會有個 zsh 資料夾 , 照官網說的 cp or mv 進去就可以了

1
2
3
4
git clone https://github.com/dracula/zsh.git
cd zsh
cp dracula.zsh-theme ~/.oh-my-zsh/themes/.
cp -r lib ~/.oh-my-zsh/themes/.

搞定布景後安裝 oh my zsh 的 plugin , 這裡參考大神 Victor 的設定
zsh-autosuggestions
zsh-completions
zsh-syntax-highlighting

1
2
3
4
cd ~/.oh-my-zsh/custom/plugins
git clone https://github.com/zsh-users/zsh-autosuggestions.git
git clone https://github.com/zsh-users/zsh-completions.git
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git

接著找到 plugins 改成這樣

1
2
3
4
5
6
7
8
9
10
11
vim ~/.zshrc

#plugins=(
# git
# zsh-autosuggestions
# zsh-completions
# zsh-syntax-highlighting
# colored-man-pages
#)

source ~/.zshrc

為你的 cat 加上色彩

因為常常會用 cat 看些東東但是沒有語法高量可以考慮安裝 bat 讓操作舒服點

1
2
3
4
sudo apt install bat
vim ~/.zshrc
#加上 alias
alias bat=batcat

裝 B 移動目錄神器 Ranger 筆記

安裝 ranger , 也可以參考這老外教學 , 也可以看下強國人影片

1
sudo apt install ranger

開啟 ranger 讓他自動建立資料夾

1
2
ranger
q

複製 ranger 的預設設定檔 template

1
ranger --copy-config=all

設定 ascii preview image 首先設定 scope.sh 找到這段把 img2txt 原本的註解開起來

1
2
3
4
5
6
7
8
vim ~/.config/ranger/scope.sh

## Image
image/*)
## Preview as text conversion
img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
exiftool "${FILE_PATH}" && exit 5
exit 1;;

接著設定 ~/.config/ranger/rc.conf

1
2
3
set preview_images false
set use_preview_script true
set preview_script ~/.config/ranger/scope.sh

設定 x11 preview image 注意只有在 ubuntu 有 gui 的機器有用 , 用 ssh 應該回 ascii 模式 , 先安裝 x11 相關工具及 ueberzug

1
2
3
4
5
6
7
sudo apt update
sudo apt upgrade
sudo apt-get install -y libx11-dev
sudo apt-get install -y xorg openbox
sudo apt-get install -y x11proto-xext-dev
sudo apt-get install -y libxext-dev
pip3 install ueberzug

設定 ~/.config/ranger/rc.conf

1
2
set preview_images true
set preview_images_method ueberzug

萬一炸 WARNING 設定以下即可

1
2
#echo 'export PATH=~/.local/bin:$PATH' >> ~/.bashrc
echo 'export PATH=~/.local/bin:$PATH' >> ~/.zshrc

最後預覽一下正妹

1
crul https://instagram.frmq3-1.fna.fbcdn.net/v/t51.2885-15/sh0.08/e35/s640x640/169486234_744729692910070_7136376512717038837_n.jpg?tp=1&_nc_ht=instagram.frmq3-1.fna.fbcdn.net&_nc_cat=110&_nc_ohc=jehk2TKowmEAX8DDWGK&edm=AABBvjUBAAAA&ccb=7-4&oh=95e49414292080950b57f70c1e6d1c09&oe=60C92944&_nc_sid=83d603 --output nono.png

在 ubuntu 上撰寫 .net core 5

今天在 ubuntu 20.04 linux 上安裝 .net core 5 莫名其妙炸了個奇怪的 error

1
E: The repository 'https://packages.microsoft.com/ubuntu/18.04/prod focal Release' does not have a Release file

查了下發現多了錯誤的版本在上面 , 可能之前沒睡飽下錯指令所致
把它們都註解掉 , 接著重新安裝 .net core 5 就搞定了 , 安裝可以參考微軟官方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo vim /etc/apt/sources.list
#deb https://packages.microsoft.com/ubuntu/18.04/prod focal main
# deb-src https://packages.microsoft.com/ubuntu/18.04/prod focal main

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

#sdk
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-5.0

#run time
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-5.0

主要參考這篇(https://github.com/OmniSharp/Omnisharp-vim)
打開 vimrc 並找到以下區塊加上 OmniSharp/omnisharp-vim

1
2
3
4
5
vim ~/.vimrc
call plug#begin('~/.vim/plugged')

#for csharp
Plug 'OmniSharp/omnisharp-vim'

接著在 vim 執行以下命令安裝 OmniSharp , 搞定後首次他會問我們要不要安裝 OmniSharp-Roslyn server 選 Yes 即可

1
:PlugInstall

接著在 Ubuntu 上面玩看看 .net core , 可以通過 dotnet xxx –help 來看詳細命令 , 這邊就直接蓋個 console 看看

1
2
3
4
5
6
7
8
9
10
mkdir helloworld
cd helloworld
dotnet new --list

#Console Application console [C#],F#,VB Common/Console
#Class library classlib [C#],F#,VB Common/Library
#Worker Service worker [C#],F# Common/Worker/Web
#MSTest Test Project mstest [C#],F#,VB Test/MSTest
#NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit
#......

蓋個 console 看看幫我們建了什麼

1
2
3
dotnet new console
ls
helloworld.csproj obj Program.cs

試著弄個 helloworld , 體驗一下 , 只能說連維護都不是很好用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.IO;

namespace helloworld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("HelloWorld");
//StreamWriter file = new StreamWriter("test.txt");
//file.WriteLine("Hello world");
//file.Close();

}
}
}

最後跑看看是否成功寫入 , 結論就是裝 B 跟拿來看看 code 還可以用 , 實際開發還是用 IDE 比較有效率

1
2
dotnet run
cat test.txt

老樣子包個 Dockerfile 來玩看看 , 參考官方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /source

# copy csproj and restore as distinct layers
COPY *.sln .
COPY helloworld/*.csproj ./helloworld/
RUN dotnet restore

# copy everything else and build app
COPY helloworld/. ./helloworld/
WORKDIR /source/helloworld
RUN dotnet publish -c release -o /app --no-restore

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "helloworld.dll"]

試跑看看 docker , 注意指定的 image 在最後面 , 另外如果用 -d 參數的話 , 這種單純的 console 是沒辦法跑起來的 , 需要切換 entrypoint

1
2
3
4
5
6
7
8
docker run  -it hello-console --name hello-console
#HelloWorld

#切換進入點 , 並且用 attach 進去看看
docker run -d -it --name hello-console --entrypoint sh hello-console
docker attach 341
ls
#helloworld helloworld.deps.json helloworld.dll helloworld.pdb helloworld.runtimeconfig.json

fzf 安裝

navi 相依於 fzf , 所以先安裝 fzf , 注意最好用新一點的版本 , 不然 navi 會炸這個 error invalid preview window layout: up:2:nohidden
安裝好跟 vim 用法差不多因為太多電腦懶得一一 config , 最近更習慣直接 esc 用 ctrl + [ 來代替 or ctrl + q 也可以
另外 fzf 除了 ctrl + n ctrl +p 以外還可以用 ctrl + j ctrl + k 上下移動

1
2
3
4
5
6
sudo apt update
sudo apt upgrade

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
source ~/.bashrc

安裝 navi

參考官方
安裝這個 navi 滿雷的 , 我最後退回到 v2.15.0 才跑得起來 , 平常沒在用 git 的 tag 功能查了下才知道還有這鬼東西

1
2
3
4
5
6
7
cd ~
sudo git clone --depth 1 https://github.com/denisidoro/navi
cd navi
sudo git fetch --all --tags
sudo apt-get install cargo
sudo git checkout tags/v2.15.0
sudo make install

都安裝好後可以自己蓋個檔案來玩看看 , 注意副檔名要是 .cheat , 可以把自己常用的一些 script 寫進來方便用
% 符號是 大類 # 是小類 , 還滿直覺的
docker.cheat

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
% docker 掛狗大全

# docker container 幫助
docker container --help

# docker 幫助串 grep
docker --help | grep --color container

# docker 列出 container
docker container ls

# docker 列出 image
docker image ls

# docker helloworld
docker run hello-world

# docker 列出停止的 container
docker container ls -a

# docker 列出停止的 container
docker container ls -a

# docker 跑 busybox
docker run -it busybox sh

# docker 跑 dotnet core
docker run -it --rm mcr.microsoft.com/dotnet/sdk dotnet

# docker 跑 nginx
docker run --name nginx -d -p 8080:80 nginx

# docker 查歷史
docker history 22d

# docker 查 log
docker logs 418

# docker 查 container 詳細訊息
docker inspect 418

# docker 拉 hello-world
docker pull hello-world

# docker 刪除沒用的 container
docker container prune

# docker 附加到 container 上
docker attach 7d3

# docker 啟動停止的容器
docker start 723

# docker 跳進容器 (bash)
docker exec -it 23d /bin/bash

# docker 死亡指令 (注意不要亂用 機器會爆炸)
echo "docker run -v /:/data busybox rm -rf /"

# docker 拉 imagemagick
docker pull dpokidov/imagemagick

# docker 轉換圖片為 ico
docker run -v ~/imgs:/imgs dpokidov/imagemagick -background transparent /imgs/kuai.png -define icon:auto-resize=16,24,32,48,64,72,96,128,258 /imgs/kuai.ico

# docker 建立 volume
docker volume create test

# docker 執行 imagemagick 在 volume 上
docker run -v test:imgs -d -it --entrypoint-/bin/bash dpokidov/imagemagick

# docker 查網路
docker network ls

# docker 讓網路跑在 host 上
docker run -d --network=host nginx

# docker 網路跑橋接
docker run -d -p 8080:80 --network=bridge nginx

# docker 查 container 內的 ip
docker inspect 345 | grep -i ipaddress

# docker container 網路用其他 container 的網路
docker run -it --net=container:345 nginx

# docker 查 pid
docker inspect 2f3 | grep -i pid

# nsenter 看 docker 網路
sudo nsenter -t 12342 -n

# docker 看 netns
sudo ls /var/run/docker/netns

# docker 打標籤 tag
docker tag dotnet-cowsay:latest dotnet-cowsay:latest


# docker 打標籤 tag remote
docker tag dotnet-cowsay:latest 172.18.22.33/dotnet-cowsay:latest

# docker login harbor
docker login http://10.1.2.123 --username admin --password Harbor12345

# docker commit
docker commit -m "cowsay" -c "ENV PATH=$PATH:/usr/games" 1234asfw dotnet5-new-cowsay

# docker 搭配 jq 輸出 raw
ls $(docker inspect test | jq -r ".[0].Mountpoint")

# docker 持續監控 log
docker logs s12 -f -t

接著讀取自己的檔案看看 , 如果按了 enter 會直接把 command 執行在 terminal
如果加了 –print 參數會把 command 寫在畫面上不會直接執行

1
2
3
4
5
navi --path .
navi --path . --print

docker 掛狗大全 docker image 用法 docker image ls ⠀
docker 掛狗大全 docker 用法 docker container ls ⠀

tldr

ubuntu 20 基本上無腦安裝 , 老實說這個訊息量確實少了很多 , 有好有壞

1
2
3
sudo apt-get install tldr
#測看看 docker 用法
tldr docker

安裝 thefuck

https://github.com/nvbn/thefuck

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt-get install -y pip
pip install thefuck

vim ~/.bashrc
PATH=$PATH:/home/vagrant/.local/bin
source ~/.bashrc

fuck
#Seems like fuck alias isn't configured!
#Please put eval "$(thefuck --alias)" in your ~/.bashrc and apply changes with source ~/.bashrc or restart your shell.
#Or run fuck a second time to configure it automatically.
#More details - https://github.com/nvbn/thefuck#manual-installation
source ~/.bashrc

Pokete

人生苦悶 , 尤其值班時要守在電腦前 , 這時候玩點類寶可夢散散心 Pokete 坦白說還不錯玩 XD
vim

其他好玩咚咚

https://github.com/agarrharr/awesome-cli-apps
https://github.com/alebcay/awesome-shell
https://vim.reversed.top/