你好! 可能这是你第一次使用 mac并配置vim和terminal ,当然这篇文章也较适合新人,大神飘过哈哈。如果你想学习如何使用vim编辑器以及terminal, 可以仔细阅读这篇文章,了解一下基本知识。
配置效果图如下:
打造最舒服的编程方式
安装homebrew包管理器
Homebrew 是一款基于 Git 的软件包管理工具,使用 Ruby 编写,用于安装 Apple 没有预装但在开发过程中需要的东西。
国内地址脚本安装)
- 推荐 完全安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- 精简版 安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" speed
- 卸载:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
homebrew命令小手册
现在版本统一用brew安装即可,用brew cask安装报错。可用于安装命令行工具,也可用于安装具有 GUI 的macOS 应用程序、字体和插件以及其他非开源软件。
命令 | 介绍 |
---|---|
brew help | 查看帮助信息 |
brew search | 搜索包 |
brew install | 安装包 |
brew info | 查看包信息 |
brew update | 更新brew |
brew outdated | 检查新版本 |
brew upgrade | 升级所有可以升级的软件 |
brew cleanup | 清除不需要的版本和缓存 |
brew link | 将软件的当前最新版本软链到 /usr/local/ 目录下 |
brew unlink | 将软件在 /usr/local/ 目录下的软链接删除 |
安装vim
mac默认自带的vim版本,但是非最新版,这里我们通过brew安装最新版的vim,并将其设置为默认vim
- 通过brew安装vim
brew install vim
- 替代mac自带的vim
where vim #可以查看vim的所有路径
which vim #可以查看此时vim的默认路径
#我们需要将默认目录设置为brew安装的vim
vim ~/.zshrc #打开zsh配置文件,没有则新建一个
alias vim='/usr/local/bin/vim' #添加此行,设置别名即可替代默认vim
配置vim界面
vim ~/.vimrc #编辑vim的配置文件,没有则新建一个
"----------------- Configuration file for vim-----------------------
set modelines=0 " CVE-2007-2438
" Normally we use vim-extensions. If you want true vi-compatibility
" remove change the following statements
set nocompatible " Use Vim defaults instead of 100% vi compatibility
set backspace=2 " more powerful backspacing
" Don't write backup file if vim is being called by "crontab -e"
au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
" Don't write backup file if vim is being called by "chpass"
au BufWrite /private/etc/pw.* set nowritebackup nobackup
let skip_defaults_vim=1
" 设置外观 -------------------------------------
set number "显示行号
set showtabline=0 "隐藏顶部标签栏"
set guioptions-=r "隐藏右侧滚动条"
set guioptions-=L "隐藏左侧滚动条"
set guioptions-=b "隐藏底部滚动条"
set cursorline "突出显示当前行"
set cursorcolumn "突出显示当前列"
set langmenu=zh_CN.UTF-8 "显示中文菜单
" 变成辅助 -------------------------------------
syntax on "开启语法高亮
"set nowrap 设置代码不折行"
set fileformat=unix "设置以unix的格式保存文件"
set cindent "设置C样式的缩进格式"
set tabstop=4 "一个 tab 显示出来是多少个空格,默认 8
set shiftwidth=4 "每一级缩进是多少个空格
set backspace+=indent,eol,start "set backspace&可以对其重置
set showmatch "显示匹配的括号"
set scrolloff=5 "距离顶部和底部5行"
set laststatus=2 "命令行为两行"
" 其他杂项 -------------------------------------
set mouse=a "启用鼠标"
set selection=exclusive
set selectmode=mouse,key
set matchtime=5
set ignorecase "忽略大小写"
set incsearch
set hlsearch "高亮搜索项"
set noexpandtab "不允许扩展table"
set whichwrap=b,s,h,l,[,],<,>
set autoread
vim插件管理器vundle
- 安装vundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 配置vundle
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
- 注意:在配置文件.vimrc中,将希望安装的插件写入call vundle#begin()和call vundle#end()行之间:Plugin ‘插件名’,然后打开Vim编辑器,运行下面的命令::PluginInstall,Vundle就会自动下载安装对应的插件
插件安装
YouCompleteMe——代码补全
高星级插件YouCompleteMe——vim自动补全神器
优点:
1.适用于各种语言;
2.多种补全引擎;
3.能够提供类似IDE的自动补全体验;
4.可与Syntastic配合提供实时语法检查;
安装前提
安装的vim得支持python,通过命令vim --version | grep python
,显示+python则支持,否则安装支持python的vim,或者使用源码重新编译vim
安装Cmake
brew install cmake
安装YouCompleteMe
官方推荐使用Vundle安装,只需将下面命令加入到~/.vimrc
Plugin 'Valloric/YouCompleteMe'
如果`:PluginInstall`过程出错,则退出重新尝试,或者直接从git上下载到`~/.vim/bundle/YouCompleteMe` 目录下
git clone https://github.com/Valloric/YouCompleteMe#full-installation-guide ~/.vim/bundle/YouCompleteMe
编译YCM,这里需要注意python版本,使用python3版本,如果系统默认是python2,则需注意更换
cd ~/.vim/bundle/YouCompleteMe
不带 C-family languages 语义支持的版本
./install.py
带 C-family languages 语义支持的版本
./install.py --clangd-completer
带 C# 语义支持的版本
./install.py --omnisharp-completer
带 Go 语言语义支持的版本
./install.py --gocode-completer
添加或修改 .ycm_extra_conf.py文件
vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
内容如下:
from distutils.sysconfig import get_python_inc
import platform
import os
import ycm_core
flags = [
'-Wall',
'-Wextra',
'-Werror',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-DNDEBUG',
# You 100% do NOT need -DUSE_CLANG_COMPLETER and/or -DYCM_EXPORT in your flags;
# only the YCM source code needs it.
'-DUSE_CLANG_COMPLETER',
'-DYCM_EXPORT=',
# THIS IS IMPORTANT! Without the '-x' flag, Clang won't know which language to
# use when compiling headers. So it will guess. Badly. So C++ headers will be
# compiled as C headers. You don't want that so ALWAYS specify the '-x' flag.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-isystem',
'../pybind11',
'-isystem',
'../BoostParts',
'-isystem',
get_python_inc(),
'-isystem',
'../llvm/include',
'-isystem',
'../llvm/tools/clang/include',
'-I',
'.',
'-I',
'./ClangCompleter',
'-isystem',
'./tests/gmock/gtest',
'-isystem',
'./tests/gmock/gtest/include',
'-isystem',
'./tests/gmock',
'-isystem',
'./tests/gmock/include',
'-isystem',
'./benchmarks/benchmark/include',
]
# Clang automatically sets the '-std=' flag to 'c++14' for MSVC 2015 or later,
# which is required for compiling the standard library, and to 'c++11' for older
# versions.
if platform.system() != 'Windows':
flags.append( '-std=c++11' )
compilation_database_folder = ''
if os.path.exists( compilation_database_folder ):
database = ycm_core.CompilationDatabase( compilation_database_folder )
else:
database = None
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
def DirectoryOfThisScript():
return os.path.dirname( os.path.abspath( __file__ ) )
def IsHeaderFile( filename ):
extension = os.path.splitext( filename )[ 1 ]
return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
def FindCorrespondingSourceFile( filename ):
if IsHeaderFile( filename ):
basename = os.path.splitext( filename )[ 0 ]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists( replacement_file ):
return replacement_file
return filename
def FlagsForFile( filename, **kwargs ):
filename = FindCorrespondingSourceFile( filename )
if not database:
return {
'flags': flags,
'include_paths_relative_to_dir': DirectoryOfThisScript(),
'override_filename': filename
}
compilation_info = database.GetCompilationInfoForFile( filename )
if not compilation_info.compiler_flags_:
return None
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object.
final_flags = list( compilation_info.compiler_flags_ )
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass
return {
'flags': final_flags,
'include_paths_relative_to_dir': compilation_info.compiler_working_dir_,
'override_filename': filename
}
配置YCM:
在vim的配置文件.vimrc中加入下面配置代码
vim ~/.vimrc
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'
set completeopt=menu,menuone
noremap <c-z> <NOP>
" 换行的时候可以自动跳到下一行
imap {<CR> {<CR>}<ESC>O
let g:ycm_semantic_triggers = {
\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
\ 'cs,lua,javascript': ['re!\w{2}'],
\ }
let g:ycm_filetype_whitelist = {
\ "c":1,
\ "cpp":1,
\ "objc":1,
\ "sh":1,
\ "zsh":1,
\ "zimbu":1,
\ }
使用YCM
编辑文本时,自动弹出补全菜单,通过tab和shift+tab键上下切换选项,enter或空格进行选取。
auto-pairs——括号自动补全
主要功能是括号和引号自动补全,输入左引号和左括号自动补全另外一半,安装好就可以无需额外配置
Plugin 'jiangmiao/auto-pairs'
之后在vim中输入:PluginInstall
等待安装即可
NERDTree——目录树
**添加目录树:**nerdtree
Plugin 'scrooloose/nerdtree'
**添加git状态图标:**nerdtree-git
Plugin 'Xuyuanp/nerdtree-git-plugin'
在vim中输入:PluginInstall
配置NERDTree
"使用F3键快速调出和隐藏它
map <F3> :NERDTreeToggle<CR>
let NERDTreeChDirMode=1
"显示书签"
let NERDTreeShowBookmarks=1
"设置忽略文件类型"
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
"窗口大小"
let NERDTreeWinSize=25
" 修改默认箭头
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
"How can I open a NERDTree automatically when vim starts up if no files were specified?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 打开vim时自动打开NERDTree
autocmd vimenter * NERDTree
"How can I open NERDTree automatically when vim starts up on opening a directory?
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif
" 关闭vim时,如果打开的文件除了NERDTree没有其他文件时,它自动关闭,减少多次按:q!
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" 开发的过程中,我们希望git信息直接在NERDTree中显示出来, 和Eclipse一样,修改的文件和增加的文件都给出相应的标注, 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
" 显示行号
let NERDTreeShowLineNumbers=1
let NERDTreeAutoCenter=1
" 在终端启动vim时,共享NERDTree
let g:nerdtree_tabs_open_on_console_startup=1
使用NERDTree
F3:自定义启用/隐藏目录树
?: 快速帮助文档
o: 打开一个目录或者打开文件,创建的是buffer,也可以用来打开书签
go: 打开一个文件,但是光标仍然留在NERDTree,创建的是buffer
t: 打开一个文件,创建的是Tab,对书签同样生效
T: 打开一个文件,但是光标仍然留在NERDTree,创建的是Tab,对书签同样生效
i: 水平分割创建文件的窗口,创建的是buffer
gi: 水平分割创建文件的窗口,但是光标仍然留在NERDTree
s: 垂直分割创建文件的窗口,创建的是buffer
gs: 和gi,go类似
x: 收起当前打开的目录
X: 收起所有打开的目录
e: 以文件管理的方式打开选中的目录
D: 删除书签
P: 大写,跳转到当前根路径
p: 小写,跳转到光标所在的上一级路径
K: 跳转到第一个子路径
J: 跳转到最后一个子路径
<C-j>和<C-k>: 在同级目录和文件间移动,忽略子目录和子文件
C: 将根路径设置为光标所在的目录
u: 设置上级目录为根路径
U: 设置上级目录为跟路径,但是维持原来目录打开的状态
r: 刷新光标所在的目录
R: 刷新当前根路径
I: 显示或者不显示隐藏文件
f: 打开和关闭文件过滤器
q: 关闭NERDTree
A: 全屏显示NERDTree,或者关闭全屏
terminal终端美化
终端美化插件og-my-zsh,可以搭配mac自带的zsh终端,也可以下载iterm2