【Mac】超詳細的個性化終端(Terminal)顏色及vim顏色配置

打包資源傳送門

一 默認設置的缺陷

Mac終端默認風格爲Basic,白底黑字(黑暗模式下黑底白字)。導致輸入很多命令後,想要尋找之前的命令提示行瞅瞎眼。

這裏記錄了終端個性化配色的設置過程,從偏好設置開始,到自定義命令提示行顏色自定義不同文件按類別顯示顏色自定義vim編輯器配色

二 終端偏好設置

打開終端,快捷鍵command + , 打開,或者菜單 “終端” – >“偏好設置” -> “描述文件”,打開如下設置窗口:
在這裏插入圖片描述

選擇了Pro主題,並修改了一些默認配置:

  1. 字體爲SF Mono,大小調整爲14號。

  2. 文本不使用粗體,而使用粗體高亮。

  3. ANSI顏色,單擊任一顏色可以打開調色板,修改了藍色(明亮)的RGB等(不然之後文件夾顯示顏色爲默認藍色,在黑色背景下難以看清)。
    在這裏插入圖片描述

  4. 光標勾選了閃動,方便看清光標位置。

三 命令提示行設置

3.1 實現個性化配置

先展示效果,清爽的命令提示行>_<,當前文件夾用紅色突出顯示:
在這裏插入圖片描述

打包資源傳送門,但建議一步步自己配置。

配置過程如下:

  1. 按順序輸入上圖命令,返回用戶目錄,顯示所有文件(包括隱藏文件)。
$ cd ~
$ ls -ah
  1. 可以看到,博主已經有了一個 .bash_profile文件,它的作用是設置一些環境變量,當用戶登錄時,該文件僅僅執行一次!如果系統默認有該文件,那我們之後的操作都追加在原有內容之後,如果沒有,就要自己創建了
  2. 輸入如下指令,進入vim編輯器後按“i”進入插入模式。(還沒習慣在vim編輯的話,可以接着按ESC :wq!保存退出,然後輸入指令open .bash_profile在Mac自帶的文本編輯裏操作)。
$ vim .bash_profile

退出vim後
$ open .bash_profile
  1. 把下面ANSI轉碼控制的顏色配置粘貼到.bash_profile文件中,先實現效果,具體原理下一節說明。
export PS1='\[\033[01;32;01m\]\h:\[\033[01;31;01m\]\W \[\033[01;32;01m\]\u$\[\033[01;00;00m\] '	# 終端命令提示行格式及顏色
  1. 退出(command + q)重啓Terminal就可以看到和博主一樣的命令提示行配色了,(這裏配置了背景透明,萬一終端背景色發生了變化,也不會在命令提示行出現一個尷尬的底色)。

3.2 配置的原理

  • Mac中的一個重要的配置文件:

    • /etc/profile:每個用戶登錄時都會運行的環境變量設置。
    • ~/.bash_profile:專用於某個用戶自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次,默認情況下,它設置一些環境變量。
  • 要修改命令行提示符,我們通過環境變量PS1來達到目的(正如我們在3.1中所做的那樣,PS1=……)。

    • 命令列表的參數,這些參數可以在我們上面配置的環境變量中找到。
參數 作用
\u 顯示當前用戶的用戶名(user name)
\h 顯示主機名(host name)
\W 顯示當前工作目錄的名字(work directory)
$ 顯示$符作爲提示符,如果用戶是root的話,則顯示#號
  • 我們來查看一下當前的PS1,就能理解上面的參數了,輸入如下指令$echo echo $PS1,注意,這裏要在我們還沒有按照3.1修改.bash_profile時的情況下操作(註釋掉個性化修改),不然輸出的結果就是我們修改的內容
localhost:~ lemon$ $echo echo $PS1

Mac默認配置輸出的結果是:
\h:\W \u\$
帶代表Mac默認的終端命令提示行格式是:
主機名:目錄 用戶名$ 
  • 從默認的PS1輸出看到,是沒有文本顏色配置的。而文本終端的顏色可以使用“ANSI非常規字符序列”來生成,(正如3.1中 [\033[01;32;40m]\h等)。
    • [ 和 ] 序列被用來封裝這些非打印字符。
    • 一個 ANSI 轉義編碼以一個八進制033(這個編碼是由 退出按鍵產生的)開頭。
    • 其後跟着一個可選的字符屬性(00:正常、01:黑體、04:下劃線、05:閃爍、07:反轉前景背景色)
    • 最後是一個指令。前景色;背景色。
'\[\033[01;32;01m\]\h'
意思就是: 
'\[這是一個ANSI編碼[正常;前景色綠色;背景色透明 結束ANSI序列\]用戶名'
字符序列 作用
[、] 封裝這些非打印字符
\033 引導非常規字符序列
字符屬性:00,01,04,05,07 正常,黑提,下劃線,閃爍,反轉前景背景色
m 設置屬性,然後結束非常規字符序列

這裏,給出大家一些顏色序列,可以修改3.1中的配色方案,設置自己喜歡的顏色。替換字符屬性、前景色、背景色對應位置的字符即可。

前景色 字符屬性爲00 字符屬性爲01
30 黑色 深灰
31 紅色 淺紅
32 綠色 淺綠
33 棕色 黃色
34 藍色 淺藍
35 粉色 淺粉
36 青色 淺青
37 淺灰 白色
背景色 字符屬性爲00 背景色 字符屬性爲01
40 黑色 44 藍色
41 紅色 45 粉色
42 綠色 46 青色
43 棕色 47 淺灰

四 不同文件類型顯示顏色配置

打包資源傳送門,但建議一步步自己配置。

同樣是在打開的.bash_profile文件中,粘貼下面的配置:

export CLICOLOR='Yes'	# 是否輸出顏色
# export LS_OPTIONS='--color=auto'	# 不同文件類型顏色配置,自動選擇顏色
export LSCOLORS='ExGxFxdaCxDaDahbadacec'	# 指定顏色,Linux配色方案

在這裏插入圖片描述

這裏完全沿用了Linux的配色方案,

顏色 文件類型
藍色 文件夾
綠色 可執行文件
白色 普通文件
青色 鏈接文件

想要修改配色方案的話需要修改上述文件中的 LSCOLORS 變量。該變量由22個字符組成,每2個一組,分別代表一種文件類型的前景色和背景色。
這11種文件類型按順序分別爲:

'
Directory
Symbolic Link
Socket
Pipe
Executable
Block Special
Character Special
Executable with Setuid Bit Set
Executable with Setgid Bit Set
Directory Writable to Others, with Sticky Bit
Directory Writable to Others, without Sticky Bit
'

顏色字符爲:

字符 顏色 字符 顏色
a 黑色 A 粗體黑色
b 紅色 B 粗體紅色
c 綠色 C 粗體綠色
d 棕色 D 粗體棕色
e 藍色 E 粗體藍色
f 洋紅 F 粗體洋紅
g 青色 G 粗體青色
h 淺灰 H 粗體淺灰
x 默認顏色

五 vim配色

打包資源傳送門,但建議一步步自己配置。

Mac默認的vim配色也是黑底白字,沒有任何高亮,需要我們自行配置,這裏配置vim人氣超高的molokai配色方案。先上效果:
在這裏插入圖片描述

  1. 進入主目錄下的.vim文件夾
$ cd ~/.vim
  1. 如果沒有.vim文件夾,則在主目錄下創建.vim
$ cd ~
$ mkdir .vim
$ cd .vim
  1. 下載molokai配色方案(沒有git命令的話,手動去下面鏈接下載,把colors文件夾放到.vim文件夾下
$ git clone https://github.com/tomasr/molokai.git
$ cp -r molokai/colors ./
  1. 檢查一下,colors文件夾(裏面有molokai)是否在.vim文件夾下,一般都是這個問題。
  2. 回到主目錄,創建.vimrc文件。
$ cd ~
$ vim .vimrc
  1. 將下面內容粘貼到.vimrc中,第三行colorscheme molokai即選擇配色方案。保存並退出(ESC :wq!)
set nocompatible " 關閉 vi 兼容模式
syntax on " 自動語法高亮

colorscheme molokai " 設定配色方案
set number " 顯示行號
set cursorline " 突出顯示當前行
set ruler " 打開狀態欄標尺
set shiftwidth=4 " 設定 << 和 >> 命令移動時的寬度爲 4
set softtabstop=4 " 使得按退格鍵時可以一次刪掉 4 個空格
set tabstop=4 " 設定 tab 長度爲 4
set nobackup " 覆蓋文件時不備份
set autochdir " 自動切換當前目錄爲當前文件所在的目錄
filetype plugin indent on " 開啓插件
set backupcopy=yes " 設置備份時的行爲爲覆蓋
set ignorecase smartcase " 搜索時忽略大小寫,但在有一個或以上大寫字母時仍保持對大小寫敏感
set nowrapscan " 禁止在搜索到文件兩端時重新搜索
set incsearch " 輸入搜索內容時就顯示搜索結果
set hlsearch " 搜索時高亮顯示被找到的文本
set noerrorbells " 關閉錯誤信息響鈴
set novisualbell " 關閉使用可視響鈴代替呼叫
set t_vb= " 置空錯誤鈴聲的終端代碼
" set showmatch " 插入括號時,短暫地跳轉到匹配的對應括號
" set matchtime=2 " 短暫跳轉到匹配括號的時間
set magic " 設置魔術
set hidden " 允許在有未保存的修改時切換緩衝區,此時的修改由 vim 負責保存
set guioptions-=T " 隱藏工具欄
set guioptions-=m " 隱藏菜單欄
set smartindent " 開啓新行時使用智能自動縮進
set backspace=indent,eol,start
" 不設定在插入狀態無法用退格鍵和 Delete 鍵刪除回車符
set cmdheight=1 " 設定命令行的行數爲 1
set laststatus=2 " 顯示狀態欄 (默認值爲 1, 無法顯示狀態欄)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ 
" 設置在狀態行顯示的信息
set foldenable " 開始摺疊
set foldmethod=syntax " 設置語法摺疊
set foldcolumn=0 " 設置摺疊區域的寬度
setlocal foldlevel=1 " 設置摺疊層數爲
" set foldclose=all " 設置爲自動關閉摺疊 
" nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" 用空格鍵來開關摺疊


" return OS type, eg: windows, or linux, mac, et.st..
function! MySys()
if has("win16") || has("win32") || has("win64") || has("win95")
return "windows"
elseif has("unix")
return "linux"
endif
endfunction

" 用戶目錄變量$VIMFILES
if MySys() == "windows"
let $VIMFILES = $VIM.'/vimfiles'
elseif MySys() == "linux"
let $VIMFILES = $HOME.'/.vim'
endif

" 設定doc文檔目錄
let helptags=$VIMFILES.'/doc'

" 設置字體 以及中文支持
if has("win32")
set guifont=Inconsolata:h12:cANSI
endif

" 配置多語言環境
if has("multi_byte")
" UTF-8 編碼
set encoding=utf-8
set termencoding=utf-8
set formatoptions+=mM
set fencs=utf-8,gbk

if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
set ambiwidth=double
endif

if has("win32")
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
language messages zh_CN.utf-8
endif
else
echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
endif

" Buffers操作快捷方式!
nnoremap <C-RETURN> :bnext<CR>
nnoremap <C-S-RETURN> :bprevious<CR>

" Tab操作快捷方式!
nnoremap <C-TAB> :tabnext<CR>
nnoremap <C-S-TAB> :tabprev<CR>

"關於tab的快捷鍵
" map tn :tabnext<cr>
" map tp :tabprevious<cr>
" map td :tabnew .<cr>
" map te :tabedit
" map tc :tabclose<cr>

"窗口分割時,進行切換的按鍵熱鍵需要連接兩次,比如從下方窗口移動
"光標到上方窗口,需要<c-w><c-w>k,非常麻煩,現在重映射爲<c-k>,切換的
"時候會變得非常方便.
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

"一些不錯的映射轉換語法(如果在一個文件中混合了不同語言時有用)
nnoremap <leader>1 :set filetype=xhtml<CR>
nnoremap <leader>2 :set filetype=css<CR>
nnoremap <leader>3 :set filetype=javascript<CR>
nnoremap <leader>4 :set filetype=php<CR>

" set fileformats=unix,dos,mac
" nmap <leader>fd :se fileformat=dos<CR>
" nmap <leader>fu :se fileformat=unix<CR>

" use Ctrl+[l|n|p|cc] to list|next|previous|jump to count the result
" map <C-x>l <ESC>:cl<CR>
" map <C-x>n <ESC>:cn<CR>
" map <C-x>p <ESC>:cp<CR>
" map <C-x>c <ESC>:cc<CR>


" 讓 Tohtml 產生有 CSS 語法的 html
" syntax/2html.vim,可以用:runtime! syntax/2html.vim
let html_use_css=1

" Python 文件的一般設置,比如不要 tab 等
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab
autocmd FileType python map <F12> :!python %<CR>

" 選中狀態下 Ctrl+c 複製
vmap <C-c> "+y

" 打開javascript摺疊
let b:javascript_fold=1
" 打開javascript對dom、html和css的支持
let javascript_enable_domhtmlcss=1
" 設置字典 ~/.vim/dict/文件的路徑
autocmd filetype javascript set dictionary=$VIMFILES/dict/javascript.dict
autocmd filetype css set dictionary=$VIMFILES/dict/css.dict
autocmd filetype php set dictionary=$VIMFILES/dict/php.dict

"-----------------------------------------------------------------
" plugin - bufexplorer.vim Buffers切換
" \be 全屏方式查看全部打開的文件列表
" \bv 左右方式查看 \bs 上下方式查看
"-----------------------------------------------------------------


"-----------------------------------------------------------------
" plugin - taglist.vim 查看函數列表,需要ctags程序
" F4 打開隱藏taglist窗口
"-----------------------------------------------------------------
if MySys() == "windows" " 設定windows系統中ctags程序的位置
let Tlist_Ctags_Cmd = '"'.$VIMRUNTIME.'/ctags.exe"'
elseif MySys() == "linux" " 設定windows系統中ctags程序的位置
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
nnoremap <silent><F4> :TlistToggle<CR>
let Tlist_Show_One_File = 1 " 不同時顯示多個文件的tag,只顯示當前文件的
let Tlist_Exit_OnlyWindow = 1 " 如果taglist窗口是最後一個窗口,則退出vim
let Tlist_Use_Right_Window = 1 " 在右側窗口中顯示taglist窗口
let Tlist_File_Fold_Auto_Close=1 " 自動摺疊當前非編輯文件的方法列表
let Tlist_Auto_Open = 0
let Tlist_Auto_Update = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Process_File_Always = 1
let Tlist_Display_Prototype = 0
let Tlist_Compact_Format = 1


"-----------------------------------------------------------------
" plugin - mark.vim 給各種tags標記不同的顏色,便於觀看調式的插件。
" \m mark or unmark the word under (or before) the cursor
" \r manually input a regular expression. 用於搜索.
" \n clear this mark (i.e. the mark under the cursor), or clear all highlighted marks .
" \* 當前MarkWord的下一個 \# 當前MarkWord的上一個
" \/ 所有MarkWords的下一個 \? 所有MarkWords的上一個
"-----------------------------------------------------------------


"-----------------------------------------------------------------
" plugin - NERD_tree.vim 以樹狀方式瀏覽系統中的文件和目錄
" :ERDtree 打開NERD_tree :NERDtreeClose 關閉NERD_tree
" o 打開關閉文件或者目錄 t 在標籤頁中打開
" T 在後臺標籤頁中打開 ! 執行此文件
" p 到上層目錄 P 到根目錄
" K 到第一個節點 J 到最後一個節點
" u 打開上層目錄 m 顯示文件系統菜單(添加、刪除、移動操作)
" r 遞歸刷新當前目錄 R 遞歸刷新當前根目錄
"-----------------------------------------------------------------
" F3 NERDTree 切換
map <F3> :NERDTreeToggle<CR>
imap <F3> <ESC>:NERDTreeToggle<CR>


"-----------------------------------------------------------------
" plugin - NERD_commenter.vim 註釋代碼用的,
" [count],cc 光標以下count行逐行添加註釋(7,cc)
" [count],cu 光標以下count行逐行取消註釋(7,cu)
" [count],cm 光標以下count行嘗試添加塊註釋(7,cm)
" ,cA 在行尾插入 ,並且進入插入模式。 這個命令方便寫註釋。
" 注:count參數可選,無則默認爲選中行或當前行
"-----------------------------------------------------------------
let NERDSpaceDelims=1 " 讓註釋符與語句之間留一個空格
let NERDCompactSexyComs=1 " 多行註釋時樣子更好看


"-----------------------------------------------------------------
" plugin - DoxygenToolkit.vim 由註釋生成文檔,並且能夠快速生成函數標準註釋
"-----------------------------------------------------------------
let g:DoxygenToolkit_authorName="Asins - asinsimple AT gmail DOT com"
let g:DoxygenToolkit_briefTag_funcName="yes"
map <leader>da :DoxAuthor<CR>
map <leader>df :Dox<CR>
map <leader>db :DoxBlock<CR>
map <leader>dc a <LEFT><LEFT><LEFT>


"-----------------------------------------------------------------
" plugin – ZenCoding.vim 很酷的插件,HTML代碼生成
" 插件最新版:http://github.com/mattn/zencoding-vim
" 常用命令可看:http://nootn.com/blog/Tool/23/
"-----------------------------------------------------------------


"-----------------------------------------------------------------
" plugin – checksyntax.vim JavaScript常見語法錯誤檢查
" 默認快捷方式爲 F5
"-----------------------------------------------------------------
let g:checksyntax_auto = 0 " 不自動檢查


"-----------------------------------------------------------------
" plugin - NeoComplCache.vim 自動補全插件
"-----------------------------------------------------------------
let g:AutoComplPop_NotEnableAtStartup = 1
let g:NeoComplCache_EnableAtStartup = 1
let g:NeoComplCache_SmartCase = 1
let g:NeoComplCache_TagsAutoUpdate = 1
let g:NeoComplCache_EnableInfo = 1
let g:NeoComplCache_EnableCamelCaseCompletion = 1
let g:NeoComplCache_MinSyntaxLength = 3
let g:NeoComplCache_EnableSkipCompletion = 1
let g:NeoComplCache_SkipInputTime = '0.5'
let g:NeoComplCache_SnippetsDir = $VIMFILES.'/snippets'
" <TAB> completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" snippets expand key
imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)


"-----------------------------------------------------------------
" plugin - matchit.vim 對%命令進行擴展使得能在嵌套標籤和語句之間跳轉
" % 正向匹配 g% 反向匹配
" [% 定位塊首 ]% 定位塊尾
"-----------------------------------------------------------------


"-----------------------------------------------------------------
" plugin - vcscommand.vim 對%命令進行擴展使得能在嵌套標籤和語句之間跳轉
" SVN/git管理工具
"-----------------------------------------------------------------


"-----------------------------------------------------------------
" plugin – a.vim
"-----------------------------------------------------------------

參考文獻

https://www.cnblogs.com/RyanJin/p/10066389.html
https://www.cnblogs.com/puyangsky/p/5442153.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章