mac配置vim和terminal——打造最舒服的编程方式

你好! 可能这是你第一次使用 mac并配置vim和terminal ,当然这篇文章也较适合新人,大神飘过哈哈。如果你想学习如何使用vim编辑器以及terminal, 可以仔细阅读这篇文章,了解一下基本知识。


配置效果图如下:
picture 2picture 2

安装homebrew包管理器

Homebrew 是一款基于 Git 的软件包管理工具,使用 Ruby 编写,用于安装 Apple 没有预装但在开发过程中需要的东西。

在这里插入图片描述

国内地址脚本安装)

  1. 推荐 完全安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
  1. 精简版 安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" speed
  1. 卸载:
/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

  1. 通过brew安装vim
brew install vim
  1. 替代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

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
可以使用Vim的分屏功能来在终端中同时查看多个文件。您可以使用以下命令来启动Vim的分屏模式: - 垂直分屏:使用大写的O参数来垂直分屏。例如:`vim -On file1 file2 ...`,其中N是数字,表示垂直分成几个屏。 - 水平分屏:使用小写的o参数来水平分屏。例如:`vim -on file1 file2 ...`,其中n是数字,表示水平分成几个屏。 要关闭分屏,可以按下`Ctrl W c`来关闭当前窗口。 请注意,上述命令是在终端中使用的,而不是在Vim内部使用的命令。同时,对于更详细的Vim分屏技巧,您可以参考引用中提供的链接。 希望对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [linux 工具——终端分屏与vim分屏](https://blog.csdn.net/u010454729/article/details/49496381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vim的分屏功能命令大全](https://download.csdn.net/download/weixin_38514872/14092268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [终端多窗口分屏Terminator、vim分屏](https://blog.csdn.net/mynameisJW/article/details/105557259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

馒头馒头侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值