Day 13:vim 设定档

+++
title = "Day 13:vim 设定档"
date = "2021-09-13"
tags = [
"cli",
"terminal",
"software development",
"vim",
"tmux",
"zsh"
]
categories = [ "ithelp", "pure-CLI-IDE" ]
+++

vim 在启动时,都会去执行你的设定档,这个档案根据你的 vim 软件不同而改变,如果是一般的 vim,那他会去读 ~/.vimrc,如果是 neovim(nvim),他会去找 ~/.config/nvim/init.vim。在接下来的文章中都以 vimrc 代指。
vimrc 内容是 vimscript,也就是所有的冒号命令去掉冒号之後的内容,例如有个命令是 :set nu,这个命令可以开启行号显示,如果要写在 vimrc 里面,就要写成 set nu

vimrc

通常我们会在 vimrc 中设定关於 vim 的外观行为载入外挂等等,接下来是我用多年的 vimrc 的内容,我会一个一个用注解解说他们的用处(双引号 " 开头是 vimscript 的注解)

" 打开语法突显
syntax on

" load plguin
" install vim-plug:
" sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
"        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
" 这个是明天的东西,先注解掉,才不会出错
" so ~/.config/nvim/plugin.vim

" 256 色
set t_Co=256
" 解决和 tmux 冲突,https://vi.stackexchange.com/questions/238/tmux-is-changing-part-of-the-background-in-vim
set t_ut=
" 选一个你喜欢的 colorschema
" available color schema
" blue darkblue default delek desert elflord evening industry koehler
" morning  murphy pablo peachpuff ron shine slate torte zellner
colorscheme koehler

" 杂项设定,详细解说请用 `:help <opeion>`,例如 `:help showcmd`
set showcmd
set nu
set tabstop=4
set shiftwidth=4
set autoindent
set nowrap
set incsearch
set autoindent
set cindent
set smartindent
set cursorline
" make lightline work in single screen
" https://github.com/itchyny/lightline.vim/issues/71#issuecomment-47859569
set laststatus=2
" 开启滑鼠功能,对初学者来说非常好用
set mouse=a

" markdown
" 如果是档案类型是 markdown 或 text,打开文字折叠(超出萤幕宽度会折到下一行)
" au 的语法等等会讲
au FileType markdown set wrap
au FileType text set wrap

" ejs
" 不加这个的话 ejs 的语法突显会很奇怪,顺便附带一个 ft, filetype 的坑
" https://vi.stackexchange.com/questions/16341/what-is-the-difference-between-set-ft-and-setfiletype
au BufNew,BufNewFile,BufRead *.ejs :set filetype=ejs
au FileType ejs set syntax=html

" ts 
" 这只是因为我比较喜欢 vim 对 javascript 的配色,typesript 的我觉得很丑,所以强制 vim 用 javascript 的配色
" au 就是 autocmd 的缩写啦!(vim 几乎每个超过三个字的命令、选项都有缩写,写程序的人都很懒XD)
autocmd BufNewFile,BufRead *.ts set syntax=javascript

" yaml
" yaml 机车的空格限制,这样在写 yaml 档时比较方便
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab

" hotkey
" 这边是自订快捷键,语法等等会讲,这边只说明用法
" 在命令模式按 <tab> 会把整行字向右移一个 tab。<S-tab> 会移回来
map <tab> :s/^/\t<CR>
map <S-tab> :s/^\t/<CR>
"  如果要从系统剪贴簿贴上多行程序码,建议这样用,才不会被 vim 的自动缩排雷到(你试试就知道是什麽问题,很讨厌)
nmap <F3> :r! cat<CR>
" 切换行号,在复制到系统键贴簿时很好用,这样就不会复制到行号
nmap <F7> :set invnumber<CR>
" 清除搜寻结果的语法突显
nmap cs :noh<CR>

" alias
" 冒号命令的别名,语法等等会讲
" 常用就知道为什麽要设这个(按冒号时要按 <shift>,然後下一个字就很常变大写,简称手残)
command W w
command Q q
command Wq wq
command WQ wq

" fix bg color error in Pmenu
" 这个只是显示问题,有时候背景色和前景色一样你就看不到字了,所以要自己把他换掉,语法等等会讲
" https://vi.stackexchange.com/questions/23328/change-color-of-coc-suggestion-box
hi Pmenu ctermbg=black ctermfg=white
hi Ignore ctermbg=black ctermfg=lightblue

command

我们从最简单的命令别名讲起,这个命令可以缩写成 com
这个命令可以定义 「使用者自订命令」
使用者自订命令一定要是大写开头

列出命令

:verbose com [cmd]
这个可以列出符合 [cmd] 的使用者自订命令,还有最後定义的位置

定义新的使用者自订命令

:commmand {cmd} {rep}
这个会设定 {cmd} 的别名 {rep}

autocmd

autocmd 是在某种类型的档案载入时自动执行命令用的,可以缩写成 au
au 的使用场景通常是某个类型的语法突显会出问题、想要根据档案类型套用不同设定,简单的语法如下
au [条件] [...命令]
条件通常长这样, FileType javascript
命令就是冒号命令除了冒号的部份

map

map 的功能是定义不是冒号开头的命令(像是 dd 这种,在前几篇文章中称为快捷键),map 又根据作用的模式分为 nmapvmapimap 等等非常多种(:help map 会列出所有 map )。其中最常用的是 mapnmapimap,这三个分别代表在「除了编辑模式中作用」、「命令模式( n )作用」、「在编辑模式作用( i )」。
各种 map 用法都一样,差别只在作用模式不同

列出 map

:map
:nmap
:imap

定义 map

map {快捷键} {命令}
{快捷键} 是 vim 的按键组合,其中 imap 用的大多都要加 或是 ,否则会没用
{命令} 是 vim 的命令,注意这里讲的是「广义的命令」,也就是包括冒号和非冒号命令,所以如果是冒号命令你必须加上冒号和 enter 键才会执行
ps: map 给我的感觉有点像「当你按下 {快捷键} 时,vim 会自动帮你打 {命令}

快捷键

快捷键可以是不只一个按键,可以像是以下几个范例

<leader>f
<C-y>k
ggk

如果一个按键可以打出来,像是abc012+=,就不用角括号 <>
如果是控制按键或是和控制按键一起按,就要加上括号,例如 <C-y><leader>,其中是指 是反斜线
更多这种按键的说明可以参考 :help key-notation

命令

这边的命令因为是广义的命令,所以如果你想要帮某个快捷键加上别名也是可以的

nmap copy yy
nmap paste p

嗯......这可能只在快捷键很常出现但是复杂时比较好用
扯远了,回到正题。如果你的命令是冒号命令的话,你必须要加上冒号和 enter,不然你在打完快捷键之後还要自己按 enter,所以记的在命令最後面加上 <CR> ,这个代表的是 enter 键, 也可以


呜呜呜~我昨天忘记发文了,等等我会把所有囤的文章发出来,但是就不会画重点和校稿了,呜呜呜,该去想明年的题目了!
另外文章也会在 我的部落格 一并更新


<<:  [13th][Day15] nil

>>:  26.移转Aras PLM 大小事-打包压缩档案并下载

123大家好~

大家好~ 在接下来30天的文章中 希望可以帮自己的经历做个笔记之外 也可以透过这次机会在更加的成长茁...

网路设备(上)

主机组好後,Server网路环境也是相当重要的一环呢! 在正式安装unRaid前会先谈各网路设备的原...

C#入门之异步编程

在很多情况下,我们的任务前后之间没有必然的联系的,所以我们可以不需要等待前面命令结束,才开始后面的任...

Day14 金银满堂-北方名菜合菜戴帽

合菜玳瑁是有名的北方菜,刚好看到读书会书友外带了好吃的合菜戴帽,把合菜戴帽比喻成蛋皮界的星海罗盘让我...

企划实现(14)

GOOGLE登入 第八步:宣告 GoogleSignInClient mgoogleSignInCl...