第255集:代码编辑器配置

教学目标

  1. 了解常用代码编辑器的特点和适用场景
  2. 掌握代码编辑器的安装和基本配置方法
  3. 熟悉插件管理和推荐插件的使用
  4. 学会配置编辑器主题、字体和界面
  5. 掌握快捷键配置和自定义方法
  6. 了解项目特定配置和工作区设置
  7. 熟悉远程开发配置和使用方法
  8. 掌握编辑器性能优化技巧
  9. 了解不同编程语言的编辑器配置
  10. 学会使用编辑器的协作功能

核心知识点讲解

1. 常用代码编辑器介绍

1.1 编辑器类型

编辑器 类型 特点 适用场景
VS Code 现代IDE式编辑器 开源,跨平台,插件丰富 全栈开发,多语言支持
Vim 终端编辑器 轻量级,高效,可定制性强 系统管理,快速编辑,远程开发
Emacs 可扩展编辑器 高度可定制,功能丰富 Lisp开发,文本处理,重度定制用户
Sublime Text 轻量级编辑器 速度快,界面简洁 快速编辑,临时文件处理
Atom 现代编辑器 开源,可定制,界面美观 前端开发,全栈开发
PyCharm 专业IDE Python专用,功能强大 Python开发,数据分析
IntelliJ IDEA 专业IDE Java专用,功能全面 Java开发,企业级应用
Visual Studio 专业IDE 功能强大,Microsoft生态 .NET开发,Windows应用

1.2 编辑器选择考虑因素

  • 性能:启动速度,响应速度,内存占用
  • 功能:语法高亮,代码补全,调试支持
  • 可扩展性:插件系统,自定义能力
  • 跨平台:支持的操作系统
  • 生态系统:插件数量,社区活跃度
  • 学习曲线:上手难度,学习成本
  • 集成能力:与其他工具的集成
  • 价格:免费 vs 付费

2. VS Code配置

2.1 VS Code安装

在Linux上安装VS Code

# Ubuntu/Debian
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code

# CentOS/RHEL
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo dnf install code
# 或使用yum
sudo yum install code

# 验证安装
code --version

在macOS上安装VS Code

# 使用Homebrew
brew install --cask visual-studio-code

# 或从官网下载安装包
# https://code.visualstudio.com/download

在Windows上安装VS Code

从官网下载安装包并运行:https://code.visualstudio.com/download

2.2 VS Code基本配置

用户设置

VS Code的配置文件位于:

  • Linux: ~/.config/Code/User/settings.json
  • macOS: ~/Library/Application Support/Code/User/settings.json
  • Windows: %APPDATA%\Code\User\settings.json

基本配置示例

{
    "editor.fontFamily": "'Fira Code', 'Courier New', monospace",
    "editor.fontSize": 14,
    "editor.lineHeight": 22,
    "editor.tabSize": 2,
    "editor.insertSpaces": true,
    "editor.detectIndentation": false,
    "editor.trimAutoWhitespace": true,
    "editor.renderWhitespace": "boundary",
    "editor.wordWrap": "on",
    "editor.minimap.enabled": true,
    "editor.minimap.showSlider": "always",
    "editor.renderLineHighlight": "all",
    "editor.cursorBlinking": "smooth",
    "editor.cursorStyle": "line",
    "editor.mouseWheelZoom": true,
    "workbench.colorTheme": "Dracula Pro",
    "workbench.iconTheme": "material-icon-theme",
    "workbench.editor.tabSizing": "shrink",
    "workbench.editor.enablePreview": false,
    "explorer.confirmDelete": false,
    "explorer.confirmDragAndDrop": false,
    "terminal.integrated.fontSize": 14,
    "terminal.integrated.lineHeight": 1.5,
    "terminal.integrated.shell.linux": "/bin/bash",
    "git.autofetch": true,
    "git.enableSmartCommit": true,
    "files.autoSave": "afterDelay",
    "files.autoSaveDelay": 1000,
    "files.trimTrailingWhitespace": true,
    "files.insertFinalNewline": true,
    "files.exclude": {
        "**/.git": true,
        "**/.svn": true,
        "**/.hg": true,
        "**/CVS": true,
        "**/.DS_Store": true,
        "**/node_modules": true,
        "**/dist": true,
        "**/build": true
    },
    "search.exclude": {
        "**/node_modules": true,
        "**/dist": true,
        "**/build": true,
        "**/vendor": true
    }
}

2.3 VS Code插件管理

安装插件

  1. 通过扩展面板安装:点击左侧扩展图标(或按 Ctrl+Shift+X),搜索插件并安装
  2. 通过命令行安装:code --install-extension <extension-id>
  3. 通过VSIX文件安装:code --install-extension <path-to-vsix>

推荐插件

类别 插件名称 功能
通用 Settings Sync 同步设置和插件
通用 Material Icon Theme 美观的文件图标
通用 Dracula Official 流行的主题
通用 GitLens 增强Git功能
通用 Code Spell Checker 拼写检查
前端 ESLint JavaScript代码检查
前端 Prettier 代码格式化
前端 Vetur Vue.js支持
前端 Reactjs code snippets React代码片段
Python Python Python支持
Python Pylance Python语言服务器
Python Black Python代码格式化
Java Language Support for Java Java支持
Java Debugger for Java Java调试
Go Go Go语言支持
Docker Docker Docker支持
Remote Remote - SSH 远程SSH开发
Remote Remote - Containers 容器内开发
Remote Remote - WSL WSL内开发

插件配置示例

{
    "eslint.enable": true,
    "eslint.alwaysShowStatus": true,
    "prettier.enable": true,
    "prettier.singleQuote": true,
    "prettier.trailingComma": "es5",
    "python.pythonPath": "${workspaceFolder}/venv/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.formatting.provider": "black",
    "python.formatting.blackArgs": ["--line-length", "88"],
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[typescript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[json]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter"
    }
}

2.4 VS Code主题和字体配置

主题配置

  • 内置主题:File > Preferences > Color Theme 或按 Ctrl+K Ctrl+T
  • 安装主题插件:如 Dracula, One Dark Pro, Material Theme 等
  • 自定义主题:修改 workbench.colorTheme 设置

字体配置

  • 推荐编程字体:
    • Fira Code:支持连字,现代风格
    • JetBrains Mono:JetBrains出品,清晰易读
    • Source Code Pro:Adobe出品,开源
    • Consolas:Windows默认编程字体
    • Monaco:macOS默认编程字体

字体配置示例

{
    "editor.fontFamily": "'Fira Code', 'Courier New', monospace",
    "editor.fontSize": 14,
    "editor.fontWeight": "400",
    "editor.fontLigatures": true,
    "editor.letterSpacing": 0.5,
    "terminal.integrated.fontFamily": "'Fira Code', monospace",
    "terminal.integrated.fontSize": 14
}

2.5 VS Code快捷键配置

默认快捷键

  • Ctrl+P:快速打开文件
  • Ctrl+Shift+P:命令面板
  • Ctrl+F:查找
  • Ctrl+H:替换
  • Ctrl+D:选择下一个匹配项
  • Ctrl+Shift+L:选择所有匹配项
  • Ctrl+Space:代码补全
  • Ctrl+Shift+Enter:在当前行上方插入新行
  • Ctrl+Enter:在当前行下方插入新行
  • Ctrl+Shift+K:删除当前行
  • Ctrl+K Ctrl+C:注释选中行
  • Ctrl+K Ctrl+U:取消注释选中行
  • Alt+Up/Down:上下移动行
  • Shift+Alt+Up/Down:复制当前行到上下方
  • Ctrl+]:缩进
  • Ctrl+[:取消缩进
  • Ctrl+Shift+[:折叠代码
  • Ctrl+Shift+]:展开代码
  • Ctrl+K Ctrl+0:折叠所有代码
  • Ctrl+K Ctrl+J:展开所有代码

自定义快捷键

通过 File > Preferences > Keyboard Shortcuts 或按 Ctrl+K Ctrl+S 打开快捷键设置,也可以直接编辑 keybindings.json 文件:

[
    {
        "key": "ctrl+shift+alt+j",
        "command": "workbench.action.terminal.new",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+shift+alt+k",
        "command": "workbench.action.terminal.kill",
        "when": "terminalFocus"
    },
    {
        "key": "ctrl+shift+alt+o",
        "command": "workbench.action.output.toggleOutput",
        "when": "editorTextFocus"
    },
    {
        "key": "alt+1",
        "command": "workbench.action.openEditorAtIndex1",
        "when": "!terminalFocus"
    },
    {
        "key": "alt+2",
        "command": "workbench.action.openEditorAtIndex2",
        "when": "!terminalFocus"
    }
]

2.6 VS Code项目特定配置

工作区设置

在项目根目录创建 .vscode/settings.json 文件,用于存储项目特定配置:

{
    "python.pythonPath": "${workspaceFolder}/venv/bin/python",
    "python.linting.pylintEnabled": true,
    "python.linting.pylintArgs": ["--max-line-length=100"],
    "python.formatting.blackArgs": ["--line-length", "100"],
    "editor.tabSize": 4,
    "editor.insertSpaces": true,
    "editor.detectIndentation": false,
    "files.exclude": {
        "**/__pycache__": true,
        "**/*.pyc": true,
        "**/venv": true
    }
}

启动配置

.vscode/launch.json 文件中配置调试启动项:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Flask",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "app.py",
                "FLASK_ENV": "development"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true
        },
        {
            "name": "Node.js: Launch",
            "type": "node",
            "request": "launch",
            "program": "${workspaceFolder}/server.js",
            "runtimeArgs": ["--nolazy"],
            "console": "integratedTerminal"
        }
    ]
}

任务配置

.vscode/tasks.json 文件中配置自定义任务:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "install dependencies",
            "type": "shell",
            "command": "npm install",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "build",
            "type": "shell",
            "command": "npm run build",
            "problemMatcher": [],
            "dependsOn": ["install dependencies"]
        },
        {
            "label": "test",
            "type": "shell",
            "command": "npm test",
            "problemMatcher": []
        }
    ]
}

2.7 VS Code远程开发配置

Remote - SSH

  1. 安装插件:ms-vscode-remote.remote-ssh
  2. 配置SSH连接:点击左下角绿色图标,选择 "Remote-SSH: Connect to Host...",然后选择 "Configure SSH Hosts..."
  3. 编辑SSH配置文件:
Host dev-server
    HostName 192.168.1.100
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa
  1. 连接到远程主机:点击左下角绿色图标,选择配置好的主机

Remote - Containers

  1. 安装插件:ms-vscode-remote.remote-containers
  2. 在项目根目录创建 .devcontainer/devcontainer.json 文件:
{
    "name": "Node.js Development Container",
    "image": "node:16-buster",
    "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode"
    ],
    "settings": {
        "terminal.integrated.shell.linux": "/bin/bash"
    },
    "mounts": [
        "source=node_modules,target=/app/node_modules,type=volume"
    ],
    "forwardPorts": [3000],
    "postCreateCommand": "npm install"
}
  1. 重新打开项目:点击左下角绿色图标,选择 "Remote-Containers: Reopen in Container"

Remote - WSL

  1. 安装插件:ms-vscode-remote.remote-wsl
  2. 在Windows上安装WSL并设置Linux分发版
  3. 连接到WSL:点击左下角绿色图标,选择 "Remote-WSL: New Window"

2.8 VS Code性能优化

性能优化设置

{
    "files.watcherExclude": {
        "**/node_modules/**": true,
        "**/dist/**": true,
        "**/build/**": true,
        "**/vendor/**": true,
        "**/.git/**": true,
        "**/.svn/**": true,
        "**/.hg/**": true,
        "**/CVS/**": true,
        "**/.DS_Store/**": true
    },
    "search.followSymlinks": false,
    "search.exclude": {
        "**/node_modules": true,
        "**/dist": true,
        "**/build": true,
        "**/vendor": true
    },
    "editor.quickSuggestionsDelay": 100,
    "editor.suggestOnTriggerCharacters": false,
    "editor.minimap.enabled": false,
    "editor.renderWhitespace": "none",
    "editor.renderControlCharacters": false,
    "editor.folding": false,
    "editor.glyphMargin": false,
    "editor.lineNumbers": "on",
    "editor.overviewRulerEnabled": false,
    "workbench.startupEditor": "none",
    "workbench.editor.enablePreview": false,
    "workbench.editor.showTabs": true,
    "extensions.autoUpdate": false,
    "extensions.autoCheckUpdates": false,
    "git.autofetch": false,
    "update.mode": "none"
}

其他优化技巧

  • 禁用不常用的插件
  • 定期更新VS Code到最新版本
  • 清理工作区缓存:rm -rf ~/.config/Code/Cache
  • 调整VS Code窗口大小和布局
  • 使用轻量级主题
  • 关闭不必要的功能,如实时预览

3. Vim配置

3.1 Vim安装和基本配置

安装Vim

# Ubuntu/Debian
sudo apt update
sudo apt install vim

# CentOS/RHEL
sudo yum install vim
# 或使用dnf
sudo dnf install vim

# macOS (使用Homebrew)
brew install vim

# 验证安装
vim --version

基本配置

编辑 ~/.vimrc 文件:

" 基本设置
set nocompatible              " 关闭兼容模式
set number                    " 显示行号
set relativenumber            " 显示相对行号
set cursorline                " 高亮当前行
set cursorcolumn              " 高亮当前列
set mouse=a                   " 启用鼠标支持
set encoding=utf-8            " 设置编码
set fileencoding=utf-8        " 设置文件编码
set termencoding=utf-8        " 设置终端编码

" 缩进设置
set tabstop=4                 " Tab键宽度
set softtabstop=4             " 软Tab宽度
set shiftwidth=4              " 缩进宽度
set expandtab                 " 将Tab转换为空格
set autoindent                " 自动缩进
set smartindent               " 智能缩进

" 搜索设置
set hlsearch                  " 高亮搜索结果
set incsearch                 "  incremental搜索
set ignorecase                " 忽略大小写
set smartcase                 " 智能大小写

" 界面设置
set showcmd                   " 显示命令
set showmode                  " 显示模式
set laststatus=2              " 显示状态栏
set statusline=%F%m%r%h%w[%Y][%{&fileencoding}][%p%%][%l,%v]" 状态栏格式
set wildmenu                  " 命令补全菜单
set wildmode=longest,list     " 命令补全模式
set backspace=indent,eol,start " 退格键设置
set wrap                      " 自动换行
set linebreak                 " 按单词换行
set textwidth=80              " 文本宽度
set colorcolumn=80            " 显示80列标记

" 备份设置
set backup                    " 启用备份
set backupdir=~/.vim/backup/  " 备份目录
set directory=~/.vim/tmp/     " 临时文件目录
set undodir=~/.vim/undo/      " 撤销文件目录
set undofile                  " 启用撤销文件
set nobackup                  " 禁用备份
set nowritebackup             " 禁用写备份
set swapfile                  " 启用交换文件

" 键盘映射
nnoremap <Space> :            " 空格键映射为冒号
nnoremap j gj                 " 向下移动时考虑换行
nnoremap k gk                 " 向上移动时考虑换行
nnoremap <C-h> <C-w>h         " 窗口导航
nnoremap <C-j> <C-w>j         " 窗口导航
nnoremap <C-k> <C-w>k         " 窗口导航
nnoremap <C-l> <C-w>l         " 窗口导航
inoremap jj <Esc>             " jj映射为Esc

" 插件管理
" 使用Vim-Plug
" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
"   https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
"call plug#begin('~/.vim/plugged')
"Plug 'preservim/nerdtree'        " 文件浏览器
"Plug 'vim-airline/vim-airline'   " 状态栏
"Plug 'tpope/vim-fugitive'        " Git集成
"Plug 'neoclide/coc.nvim', {'branch': 'release'} " 代码补全
"call plug#end()

" 自动创建目录
if !isdirectory(expand('~/.vim/backup'))
    call mkdir(expand('~/.vim/backup'), 'p')
endif
if !isdirectory(expand('~/.vim/tmp'))
    call mkdir(expand('~/.vim/tmp'), 'p')
endif
if !isdirectory(expand('~/.vim/undo'))
    call mkdir(expand('~/.vim/undo'), 'p')
endif

" 语法高亮
syntax enable
syntax on

" 配色方案
"colorscheme molokai
"colorscheme dracula
"colorscheme solarized-dark

" 文件类型检测
filetype on
filetype plugin on
filetype indent on

" 自动读取文件变化
set autoread

" 禁用铃声
set noerrorbells
set visualbell
set t_vb=

" 命令历史
set history=1000

" 启动设置
set shortmess+=I              " 禁用启动信息
set noruler                   " 禁用标尺

" 光标设置
set guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175

" 会话管理
"set sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,terminal"
"autocmd VimLeave * mksession! ~/.vim/session.vim
"autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | source ~/.vim/session.vim | endif

3.2 Vim插件管理

使用Vim-Plug

  1. 安装Vim-Plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  1. ~/.vimrc 中配置插件:
call plug#begin('~/.vim/plugged')

" 文件浏览器
Plug 'preservim/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'

" 状态栏
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" Git集成
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'

" 代码补全
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" 语法高亮和缩进
Plug 'sheerun/vim-polyglot'
Plug 'vim-scripts/indentpython.vim'

" 搜索
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

" 颜色主题
Plug 'dracula/vim', { 'as': 'dracula' }
Plug 'altercation/vim-colors-solarized'

" 其他工具
Plug 'tpope/vim-surround'
Plug 'tpope/vim-commentary'
Plug 'mg979/vim-visual-multi'

call plug#end()
  1. 安装插件:在Vim中运行 :PlugInstall
  2. 更新插件:在Vim中运行 :PlugUpdate
  3. 移除插件:在 ~/.vimrc 中注释或删除插件行,然后运行 :PlugClean

3.3 Vim快捷键和命令

基本命令

  • i:进入插入模式
  • Esc:退出插入模式,进入正常模式
  • ::进入命令模式
  • v:进入可视模式
  • V:进入可视行模式
  • &lt;C-v&gt;:进入可视块模式
  • gg:跳转到文件开头
  • G:跳转到文件结尾
  • 0:跳转到行首
  • $:跳转到行尾
  • w:跳转到下一个单词开头
  • e:跳转到下一个单词结尾
  • b:跳转到上一个单词开头
  • dd:删除当前行
  • yy:复制当前行
  • p:粘贴到当前行下方
  • P:粘贴到当前行上方
  • u:撤销
  • &lt;C-r&gt;:重做
  • /pattern:向下搜索
  • ?pattern:向上搜索
  • n:跳转到下一个搜索结果
  • N:跳转到上一个搜索结果
  • :w:保存文件
  • :q:退出Vim
  • :wq:保存并退出
  • :q!:强制退出,不保存
  • :e!:放弃修改,重新加载文件
  • :set nu:显示行号
  • :set nonu:隐藏行号
  • :set paste:进入粘贴模式
  • :set nopaste:退出粘贴模式

常用快捷键

  • &lt;C-w&gt;s:水平分割窗口
  • &lt;C-w&gt;v:垂直分割窗口
  • &lt;C-w&gt;w:在窗口间切换
  • &lt;C-w&gt;h/j/k/l:在窗口间导航
  • &lt;C-w&gt;+=:平均分配窗口大小
  • &lt;C-w&gt;_:最大化当前窗口高度
  • &lt;C-w&gt;|:最大化当前窗口宽度
  • &lt;C-t&gt;:在新标签页中打开文件
  • gt:切换到下一个标签页
  • gT:切换到上一个标签页
  • :tabclose:关闭当前标签页
  • :NERDTree:打开NERDTree文件浏览器
  • :Git:打开Git命令
  • :FZF:打开FZF搜索

4. Emacs配置

4.1 Emacs安装和基本配置

安装Emacs

# Ubuntu/Debian
sudo apt update
sudo apt install emacs

# CentOS/RHEL
sudo yum install emacs
# 或使用dnf
sudo dnf install emacs

# macOS (使用Homebrew)
brew install emacs

# 验证安装
emacs --version

基本配置

编辑 ~/.emacs~/.emacs.d/init.el 文件:

;; 基本设置
(setq inhibit-startup-message t)    ; 禁用启动信息
(setq initial-scratch-message "")   ; 清空scratch缓冲区
(setq-default cursor-type 'bar)     ; 设置光标类型
(setq-default indent-tabs-mode nil) ; 禁用Tab缩进
(setq-default tab-width 4)          ; 设置Tab宽度
(setq sentence-end-double-space nil); 句子结束不需要两个空格
(setq ring-bell-function 'ignore)   ; 禁用铃声

;; 界面设置
(tool-bar-mode -1)                  ; 禁用工具栏
(menu-bar-mode -1)                  ; 禁用菜单栏
(scroll-bar-mode -1)                ; 禁用滚动条
(line-number-mode t)                ; 显示行号
(column-number-mode t)              ; 显示列号
(size-indication-mode t)            ; 显示文件大小
(global-hl-line-mode t)             ; 高亮当前行

;; 编码设置
(setq buffer-file-coding-system 'utf-8) ; 设置缓冲区编码
(setq default-file-name-coding-system 'utf-8) ; 设置默认文件名编码
(setq default-process-coding-system '(utf-8 . utf-8)) ; 设置默认进程编码

;; 备份设置
(setq backup-directory-alist '("/tmp" . "")) ; 设置备份目录
(setq delete-old-versions t)        ; 删除旧版本备份
(setq kept-new-versions 6)          ; 保留最新6个版本
(setq kept-old-versions 2)          ; 保留最旧2个版本
(setq version-control t)            ; 启用版本控制
(setq vc-make-backup-files t)       ; 启用VC备份

;; 自动保存设置
(setq auto-save-file-name-transforms '("/tmp" . "")) ; 设置自动保存目录
(setq auto-save-interval 300)       ; 自动保存间隔(字符数)
(setq auto-save-timeout 30)         ; 自动保存超时(秒)

;; 历史设置
(setq history-length 1000)          ; 设置历史长度
(savehist-mode 1)                   ; 保存历史

;; 搜索设置
(setq search-highlight t)           ; 高亮搜索结果
(setq query-replace-highlight t)    ; 高亮替换结果
(setq case-fold-search t)           ; 忽略大小写搜索
(setq case-replace t)               ; 大小写敏感替换

;; 缩进设置
(setq standard-indent 4)            ; 设置标准缩进
(setq c-basic-offset 4)             ; 设置C基本偏移

;; 语法高亮
(global-font-lock-mode t)           ; 启用全局字体锁定
(setq font-lock-maximum-decoration t) ; 设置最大装饰级别

;; 自动换行
(setq default-fill-column 80)       ; 设置默认填充列
(global-visual-line-mode t)         ; 启用全局视觉行模式

;; 文件类型检测
(setq auto-mode-alist (cons '(".md" . markdown-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".yml" . yaml-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".yaml" . yaml-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".json" . json-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".js" . js-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".jsx" . js-jsx-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".ts" . typescript-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".tsx" . typescript-jsx-mode) auto-mode-alist))
(setq auto-mode-alist (cons '(".py" . python-mode) auto-mode-alist))

;; 快捷键设置
(global-set-key (kbd "C-x C-b") 'ibuffer) ; 替换默认的buffer-list
(global-set-key (kbd "C-s") 'isearch-forward-regexp) ; 正则搜索
(global-set-key (kbd "C-r") 'isearch-backward-regexp) ; 正则反向搜索
(global-set-key (kbd "M-s") 'save-buffer) ; 保存缓冲区
(global-set-key (kbd "M-q") 'kill-buffer) ; 关闭缓冲区
(global-set-key (kbd "M-/") 'hippie-expand) ; 智能补全
(global-set-key (kbd "C-x C-k") 'kill-region) ; 杀死区域
(global-set-key (kbd "C-c C-k") 'kill-ring-save) ; 保存到kill-ring

;; 包管理器设置
(require 'package)
(setq package-archives '(
    ("gnu" . "https://elpa.gnu.org/packages/")
    ("melpa" . "https://melpa.org/packages/")
    ("melpa-stable" . "https://stable.melpa.org/packages/")
))
(package-initialize)

;; 自动安装use-package
(unless (package-installed-p 'use-package)
    (package-refresh-contents)
    (package-install 'use-package))

;; 使用use-package
(require 'use-package)
(setq use-package-always-ensure t)

;; 安装和配置常用包
(use-package doom-themes
    :config
    (load-theme 'doom-dracula t))

(use-package doom-modeline
    :config
    (doom-modeline-mode 1))

(use-package magit
    :bind ("C-x g" . magit-status))

(use-package projectile
    :config
    (projectile-mode 1)
    :bind-keymap
    ("C-c p" . projectile-command-map))

(use-package helm
    :config
    (helm-mode 1)
    :bind (
        ("M-x" . helm-M-x)
        ("C-x C-f" . helm-find-files)
        ("C-x b" . helm-buffers-list)
        ("C-x r b" . helm-bookmarks)
        ("M-y" . helm-show-kill-ring)
    ))

(use-package company
    :config
    (global-company-mode 1)
    (setq company-idle-delay 0.2)
    (setq company-minimum-prefix-length 2))

(use-package flycheck
    :config
    (global-flycheck-mode 1))

;; 自动加载配置
(add-to-list 'load-path "~/.emacs.d/lisp")

;; 自定义函数
(defun indent-buffer ()
    "缩进整个缓冲区"
    (interactive)
    (indent-region (point-min) (point-max)))

(defun toggle-comment-on-line ()
    "切换当前行的注释状态"
    (interactive)
    (comment-or-uncomment-region (line-beginning-position) (line-end-position)))

;; 自定义快捷键
(global-set-key (kbd "C-c i") 'indent-buffer)
(global-set-key (kbd "C-c c") 'toggle-comment-on-line)

;; 启动设置
(setq initial-frame-alist '((width . 80) (height . 25)))
(setq default-frame-alist '((width . 80) (height . 25)))

;; 服务器模式
(server-start)

4.2 Emacs插件管理

使用Package.el

  1. 配置包仓库:
(require 'package)
(setq package-archives '(
    ("gnu" . "https://elpa.gnu.org/packages/")
    ("melpa" . "https://melpa.org/packages/")
    ("melpa-stable" . "https://stable.melpa.org/packages/")
))
(package-initialize)
  1. 安装插件:
    • M-x package-refresh-contents:刷新包列表
    • M-x package-install RET &lt;package-name&gt; RET:安装插件

使用use-package

(unless (package-installed-p 'use-package)
    (package-refresh-contents)
    (package-install 'use-package))

(require 'use-package)
(setq use-package-always-ensure t)

(use-package doom-themes
    :config
    (load-theme 'doom-dracula t))

(use-package magit
    :bind ("C-x g" . magit-status))

推荐插件

  • doom-themes:美观的主题集合
  • doom-modeline:现代的状态栏
  • magit:Git集成
  • projectile:项目管理
  • helm:增强的搜索和导航
  • company:代码补全
  • flycheck:代码检查
  • markdown-mode:Markdown支持
  • yaml-mode:YAML支持
  • json-mode:JSON支持
  • typescript-mode:TypeScript支持
  • python-mode:Python支持

5. 不同编程语言的编辑器配置

5.1 Python开发配置

VS Code配置

{
    "python.pythonPath": "${workspaceFolder}/venv/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.flake8Enabled": false,
    "python.linting.mypyEnabled": true,
    "python.formatting.provider": "black",
    "python.formatting.blackArgs": ["--line-length", "88"],
    "python.sortImports.args": ["--profile", "black"],
    "python.autoComplete.addBrackets": true,
    "python.analysis.extraPaths": ["${workspaceFolder}"],
    "python.analysis.typeCheckingMode": "basic",
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}

Vim配置

" Python设置
au BufNewFile,BufRead *.py set filetype=python
au FileType python set tabstop=4 softtabstop=4 shiftwidth=4 expandtab
au FileType python set autoindent smartindent
au FileType python set textwidth=88
au FileType python set colorcolumn=88
au FileType python map <buffer> <F5> :!python %<CR>

" Python插件
Plug 'davidhalter/jedi-vim'        " Python代码补全
Plug 'vim-scripts/indentpython.vim' " Python缩进
Plug 'nvie/vim-flake8'             " Python代码检查
Plug 'averms/black-nvim'           " Python代码格式化

5.2 JavaScript/TypeScript开发配置

VS Code配置

{
    "javascript.format.enable": true,
    "javascript.validate.enable": true,
    "javascript.suggest.autoImports": true,
    "javascript.updateImportsOnFileMove.enabled": "always",
    "typescript.format.enable": true,
    "typescript.validate.enable": true,
    "typescript.suggest.autoImports": true,
    "typescript.updateImportsOnFileMove.enabled": "always",
    "eslint.enable": true,
    "eslint.alwaysShowStatus": true,
    "eslint.validate": [
        "javascript",
        "javascriptreact",
        "typescript",
        "typescriptreact"
    ],
    "prettier.enable": true,
    "prettier.singleQuote": true,
    "prettier.trailingComma": "es5",
    "prettier.tabWidth": 2,
    "prettier.printWidth": 80,
    "[javascript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.codeActionsOnSave": {
            "source.fixAll.eslint": true
        }
    },
    "[typescript]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.codeActionsOnSave": {
            "source.fixAll.eslint": true
        }
    },
    "[javascriptreact]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.codeActionsOnSave": {
            "source.fixAll.eslint": true
        }
    },
    "[typescriptreact]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        "editor.codeActionsOnSave": {
            "source.fixAll.eslint": true
        }
    }
}

Vim配置

" JavaScript/TypeScript设置
au BufNewFile,BufRead *.js,*.jsx set filetype=javascript
au BufNewFile,BufRead *.ts,*.tsx set filetype=typescript
au FileType javascript,typescript set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
au FileType javascript,typescript set autoindent smartindent
au FileType javascript,typescript set textwidth=80
au FileType javascript,typescript set colorcolumn=80

" JavaScript/TypeScript插件
Plug 'pangloss/vim-javascript'     " JavaScript支持
Plug 'HerringtonDarkholme/yats.vim' " TypeScript支持
Plug 'maxmellon/vim-jsx-pretty'    " JSX支持
Plug 'eslint/eslint'               " ESLint集成
Plug 'prettier/prettier'           " Prettier集成

5.3 Java开发配置

VS Code配置

{
    "java.home": "/usr/lib/jvm/java-11-openjdk-amd64",
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-11",
            "path": "/usr/lib/jvm/java-11-openjdk-amd64",
            "default": true
        },
        {
            "name": "JavaSE-17",
            "path": "/usr/lib/jvm/java-17-openjdk-amd64"
        }
    ],
    "java.format.settings.url": "${workspaceFolder}/.vscode/eclipse-formatter.xml",
    "java.format.settings.profile": "GoogleStyle",
    "java.completion.favoriteStaticMembers": [
        "org.junit.Assert.*",
        "org.junit.Assume.*",
        "org.junit.jupiter.api.Assertions.*",
        "org.junit.jupiter.api.Assumptions.*",
        "org.junit.jupiter.api.DynamicContainer.*",
        "org.junit.jupiter.api.DynamicTest.*",
        "org.mockito.Mockito.*",
        "org.mockito.ArgumentMatchers.*",
        "org.mockito.Answers.*"
    ],
    "java.debug.settings.hotCodeReplace": "auto",
    "[java]": {
        "editor.defaultFormatter": "redhat.java",
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}

Vim配置

" Java设置
au BufNewFile,BufRead *.java set filetype=java
au FileType java set tabstop=4 softtabstop=4 shiftwidth=4 expandtab
au FileType java set autoindent smartindent
au FileType java set textwidth=100
au FileType java set colorcolumn=100
au FileType java map <buffer> <F5> :!javac % && java %:r<CR>

" Java插件
Plug 'vim-java/java.vim'           " Java支持
Plug 'artur-shaik/vim-javacomplete2' " Java代码补全
Plug 'google/vim-maktaba'          " 依赖
Plug 'google/vim-codefmt'          " 代码格式化
Plug 'google/vim-glaive'           " 依赖

6. 编辑器协作功能

6.1 VS Code Live Share

安装和使用

  1. 安装插件:ms-vsliveshare.vsliveshare
  2. 登录:点击左侧Live Share图标,选择登录方式
  3. 开始协作会话:点击 "Start Collaboration Session"
  4. 分享链接:复制生成的链接并发送给合作者
  5. 加入会话:合作者点击链接,选择 "Open in VS Code"

协作功能

  • 实时编辑:多人同时编辑同一个文件
  • 共享终端:共享集成终端
  • 共享调试会话:共同调试代码
  • 共享服务器:共享本地服务器
  • 访问控制:控制合作者的权限

6.2 Vim协作插件

使用vim-rtc

  1. 安装插件:Plug &#39;kana/vim-rtc&#39;
  2. 配置:
let g:rtc_server_host = 'localhost'
let g:rtc_server_port = 8080
let g:rtc_room = 'my-room'
  1. 启动服务器::RTCStartServer
  2. 连接到服务器: :RTCClientConnect

使用tmate

  1. 安装tmate:
# Ubuntu/Debian
sudo apt install tmate

# CentOS/RHEL
sudo yum install tmate

# macOS (Homebrew)
brew install tmate
  1. 启动tmate:tmate
  2. 查看连接信息:tmate show-messages
  3. 分享SSH链接:将生成的SSH链接发送给合作者
  4. 合作者连接:ssh &lt;tmate-ssh-link&gt;

实用案例分析

案例1:VS Code全栈开发环境配置

需求分析:为一个全栈开发项目配置VS Code环境,支持前端(React)、后端(Node.js)和数据库(MongoDB)开发。

实施步骤

  1. 安装必要插件
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension msjsdiag.debugger-for-chrome
code --install-extension ms-azuretools.vscode-docker
code --install-extension formulahendry.auto-close-tag
code --install-extension formulahendry.auto-rename-tag
code --install-extension pranaygp.vscode-css-peek
code --install-extension ms-python.python
code --install-extension vscode-icons-team.vscode-icons
  1. 创建工作区配置
{
    "folders": [
        {
            "path": "./frontend"
        },
        {
            "path": "./backend"
        }
    ],
    "settings": {
        "editor.fontFamily": "'Fira Code', 'Courier New', monospace",
        "editor.fontSize": 14,
        "editor.tabSize": 2,
        "editor.insertSpaces": true,
        "editor.detectIndentation": false,
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.fixAll.eslint": true
        },
        "workbench.colorTheme": "Dracula Pro",
        "workbench.iconTheme": "vscode-icons",
        "eslint.enable": true,
        "eslint.validate": [
            "javascript",
            "javascriptreact",
            "typescript",
            "typescriptreact"
        ],
        "prettier.singleQuote": true,
        "prettier.trailingComma": "es5",
        "prettier.tabWidth": 2,
        "[javascript]": {
            "editor.defaultFormatter": "esbenp.prettier-vscode"
        },
        "[javascriptreact]": {
            "editor.defaultFormatter": "esbenp.prettier-vscode"
        },
        "[typescript]": {
            "editor.defaultFormatter": "esbenp.prettier-vscode"
        },
        "[typescriptreact]": {
            "editor.defaultFormatter": "esbenp.prettier-vscode"
        },
        "[json]": {
            "editor.defaultFormatter": "esbenp.prettier-vscode"
        },
        "terminal.integrated.shell.linux": "/bin/bash",
        "terminal.integrated.fontSize": 14,
        "files.autoSave": "afterDelay",
        "files.autoSaveDelay": 1000,
        "files.trimTrailingWhitespace": true,
        "files.insertFinalNewline": true,
        "search.exclude": {
            "**/node_modules": true,
            "**/dist": true,
            "**/build": true
        }
    }
}
  1. 创建前端配置

frontend/.vscode/settings.json 中:

{
    "javascript.format.enable": true,
    "javascript.validate.enable": true,
    "javascript.suggest.autoImports": true,
    "javascript.updateImportsOnFileMove.enabled": "always",
    "typescript.format.enable": true,
    "typescript.validate.enable": true,
    "typescript.suggest.autoImports": true,
    "typescript.updateImportsOnFileMove.enabled": "always",
    "emmet.includeLanguages": {
        "javascript": "javascriptreact",
        "typescript": "typescriptreact"
    }
}
  1. 创建后端配置

backend/.vscode/settings.json 中:

{
    "python.pythonPath": "${workspaceFolder}/venv/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.formatting.provider": "black",
    "python.formatting.blackArgs": ["--line-length", "88"],
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}
  1. 创建启动配置

.vscode/launch.json 中:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Frontend: Chrome",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost:3000",
            "webRoot": "${workspaceFolder}/frontend",
            "sourceMaps": true,
            "sourceMapPathOverrides": {
                "webpack:///src/*": "${webRoot}/src/*"
            }
        },
        {
            "name": "Backend: Python",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "app.py",
                "FLASK_ENV": "development"
            },
            "args": [
                "run",
                "--no-debugger",
                "--no-reload"
            ],
            "jinja": true,
            "cwd": "${workspaceFolder}/backend"
        },
        {
            "name": "Backend: Node.js",
            "type": "node",
            "request": "launch",
            "program": "${workspaceFolder}/backend/server.js",
            "runtimeArgs": ["--nolazy"],
            "console": "integratedTerminal"
        }
    ]
}

案例2:Vim远程开发配置

需求分析:在本地使用Vim通过SSH编辑远程服务器上的代码,实现高效的远程开发。

实施步骤

  1. 配置SSH
# 生成SSH密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 复制公钥到远程服务器
ssh-copy-id username@remote-server

# 配置SSH配置文件
cat >> ~/.ssh/config << 'EOF'
Host dev
    HostName remote-server
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ServerAliveInterval 60
EOF
  1. 配置Vim
" 远程编辑设置
set autowrite                  " 自动保存
set autoread                   " 自动读取文件变化
set confirm                    " 确认操作

" SSH编辑
nnoremap <leader>e :edit scp://dev//path/to/file<CR>

" 远程复制
command! -nargs=1 CopyToRemote :execute '!scp % dev:' . <q-args>
command! -nargs=1 CopyFromRemote :execute '!scp dev:' . <q-args> . ' %'

" 使用rsync同步
command! -nargs=0 SyncRemote :execute '!rsync -avz --exclude=".git" --exclude="node_modules" . dev:/path/to/project/'
command! -nargs=0 SyncLocal :execute '!rsync -avz --exclude=".git" --exclude="node_modules" dev:/path/to/project/ .'

" 远程终端
nnoremap <leader>t :term ssh dev<CR>

" 插件
Plug 'chrisbra/RemoteOpen'      " 远程文件打开
Plug 'kenn7/vim-arsync'         " 远程同步

" 配置vim-arsync
let g:arsync_exclude = ['node_modules', '.git', 'dist', 'build']
let g:arsync_autosync = 1
  1. 使用方法
  • 编辑远程文件:vim scp://dev//path/to/file
  • 同步本地到远程::SyncRemote
  • 同步远程到本地::SyncLocal
  • 打开远程终端:按 &lt;leader&gt;t

案例3:Emacs Python开发环境配置

需求分析:为Python开发配置Emacs环境,包括代码补全、语法检查、代码格式化等功能。

实施步骤

  1. 安装必要包
# 安装Python包
pip install jedi flake8 black isort mypy

# 安装Emacs包
# 在Emacs中运行:M-x package-refresh-contents
# M-x package-install RET jedi RET
# M-x package-install RET flycheck RET
# M-x package-install RET elpy RET
# M-x package-install RET py-autopep8 RET
  1. 配置Emacs
;; Python开发配置
(use-package elpy
    :ensure t
    :init
    (elpy-enable)
    :config
    (setq elpy-rpc-python-command "python3")
    (setq elpy-rpc-timeout 10)
    (setq elpy-syntax-check-command "flake8")
    (setq elpy-formatter "black")
    (setq elpy-autopep8-options '(
        "--max-line-length=88"
    ))
    (setq elpy-isort-options '(
        "--profile", "black"
    ))
    (add-hook 'elpy-mode-hook 'pyvenv-mode)
    (add-hook 'elpy-mode-hook 'flycheck-mode)
    (add-hook 'elpy-mode-hook (lambda ()
        (local-set-key (kbd "C-c C-c") 'elpy-shell-send-buffer-and-step)
        (local-set-key (kbd "C-c C-d") 'elpy-doc)
        (local-set-key (kbd "C-c C-r") 'elpy-refactor)
        (local-set-key (kbd "C-c C-f") 'elpy-format-code)
    )))

(use-package jedi
    :ensure t
    :config
    (add-hook 'python-mode-hook 'jedi:setup)
    (setq jedi:complete-on-dot t)
    (setq jedi:use-shortcuts t)
    (setq jedi:tooltip-method nil))

(use-package flycheck
    :ensure t
    :config
    (add-hook 'python-mode-hook 'flycheck-mode)
    (setq flycheck-python-flake8-executable "flake8")
    (setq flycheck-python-pylint-executable "pylint")
    (setq flycheck-python-mypy-executable "mypy"))

(use-package py-autopep8
    :ensure t
    :config
    (add-hook 'python-mode-hook 'py-autopep8-enable-on-save))

(use-package blacken
    :ensure t
    :config
    (add-hook 'python-mode-hook 'blacken-mode)
    (setq blacken-line-length 88)
    (setq blacken-skip-string-normalization t))

;; 虚拟环境管理
(use-package pyvenv
    :ensure t
    :config
    (setq pyvenv-workon-home "~/.virtualenvs")
    (setq pyvenv-default-virtual-env "~/.virtualenvs/default")
    (pyvenv-tracking-mode 1))

;; 项目管理
(use-package projectile
    :ensure t
    :config
    (projectile-mode 1)
    (setq projectile-project-root-files-bottom-up '("setup.py" "pyproject.toml" "tox.ini"))
    (setq projectile-project-root-files-top-down-recurring '("setup.py" "pyproject.toml")))
  1. 使用方法
  • 打开Python文件:C-x C-f path/to/file.py
  • 运行Python文件:C-c C-c
  • 查看文档:C-c C-d
  • 重构代码:C-c C-r
  • 格式化代码:C-c C-f
  • 切换虚拟环境:M-x pyvenv-workon RET env-name RET
  • 检查语法:M-x flycheck-list-errors

课后练习

  1. 基础练习

    • 安装并配置VS Code,设置主题和字体
    • 安装常用插件,如ESLint、Prettier、GitLens等
    • 配置Vim基本设置,如行号、缩进、搜索等
    • 安装并配置Emacs,设置Python开发环境
  2. 进阶练习

    • 为前端项目配置VS Code,包括ESLint、Prettier和TypeScript支持
    • 为Python项目配置VS Code,包括Pylance、Black和Flake8支持
    • 配置Vim插件,如NERDTree、vim-airline和coc.nvim
    • 配置Emacs插件,如elpy、jedi和flycheck
    • 设置VS Code远程开发环境,连接到远程服务器
  3. 综合练习

    • 为全栈项目配置VS Code工作区,包括前端和后端设置
    • 配置Vim远程开发环境,实现本地和远程文件同步
    • 为Python项目配置Emacs环境,包括代码补全、语法检查和代码格式化
    • 使用VS Code Live Share进行协作开发
    • 优化编辑器性能,提高开发效率

总结

代码编辑器是开发者最常用的工具之一,配置好编辑器可以显著提高开发效率和代码质量。通过本教程的学习,我们了解了常用代码编辑器的特点和适用场景,掌握了VS Code、Vim和Emacs的安装和基本配置方法,熟悉了插件管理和推荐插件的使用,学会了配置编辑器主题、字体和界面,掌握了快捷键配置和自定义方法,了解了项目特定配置和工作区设置,熟悉了远程开发配置和使用方法,掌握了编辑器性能优化技巧,了解了不同编程语言的编辑器配置,学会了使用编辑器的协作功能。

在实际开发中,选择合适的编辑器并进行合理配置是非常重要的。VS Code适合需要现代IDE功能的开发者,Vim适合需要高效终端编辑的开发者,Emacs适合需要高度定制的开发者。无论选择哪种编辑器,都需要根据自己的需求和习惯进行配置,以达到最佳的开发体验。

通过不断学习和实践,开发者可以打造属于自己的高效代码编辑环境,提高开发效率,减少错误,写出更高质量的代码。

« 上一篇 开发环境隔离 下一篇 » 开发依赖管理