WSL 安装 Debian 12 后,Linux 如何安装 vim ?
在 WSL 的 Debian 12 中安装 Vim 非常简单,只需使用 apt
包管理器即可。以下是详细步骤:
1. 更新软件包列表
首先打开终端,确保系统包列表是最新的:
sudo apt update
2. 安装 Vim
直接通过 apt
安装 Vim:
sudo apt install vim -y
-y
参数表示自动确认安装,避免手动输入确认。
3. 验证安装
安装完成后,检查 Vim 版本以确认安装成功:
vim --version
如果看到版本信息(如 VIM - Vi IMproved 9.0
),则说明安装成功。
4. 使用 Vim
直接输入 vim
命令即可启动编辑器:
vim 文件名
- 基础操作:
- 按
i
进入编辑模式。 - 按
Esc
退出编辑模式。 - 输入
:wq
保存并退出,:q!
不保存强制退出。
- 按
可能出现的问题
-
安装失败:
- 检查网络连接(WSL 需依赖 Windows 网络)。
- 确保已正确执行
sudo apt update
。
-
命令未找到:
- 确认安装包名正确,Debian 中包名为
vim
,而非vim-tiny
(精简版)。
- 确认安装包名正确,Debian 中包名为
通过以上步骤,你可以在 Debian 12 中快速安装并使用 Vim。
vim 与 vi 有什么不同 ?
vim
(Vi IMproved)是 vi
的增强版本,两者在功能和用户体验上有显著区别。以下是具体差异:
1. 历史背景
vi
:
诞生于 1976 年(Bill Joy 开发),是 Unix 系统的经典文本编辑器,功能简单但高效。vim
:
由 Bram Moolenaar 于 1991 年开发,目标是改进vi
,提供更丰富的功能,同时保持兼容性。
2. 功能差异
功能 | vi | vim |
---|---|---|
语法高亮 | ❌ 不支持 | ✅ 支持多种编程语言的语法高亮 |
多级撤销(Undo) | ❌ 仅支持单步撤销 | ✅ 支持无限次撤销 |
插件系统 | ❌ 不支持 | ✅ 可通过插件扩展功能(如代码补全、版本控制) |
多窗口/分屏 | ❌ 不支持 | ✅ 支持横向/纵向分屏编辑 |
脚本支持 | ❌ 不支持复杂脚本 | ✅ 支持 Vimscript/Lua/Python 等脚本语言 |
搜索高亮 | ❌ 无 | ✅ 可高亮所有匹配项 |
图形界面 | ❌ 纯命令行 | ✅ 支持 GUI 版本(如 gvim ) |
3. 兼容性
vim
几乎完全兼容vi
的语法和操作(例如h/j/k/l
移动、:wq
保存退出等)。- 在多数 Linux 系统中,
vi
命令实际指向vim
的简化版(如vim.tiny
),可通过以下命令验证:ls -l /usr/bin/vi # 通常显示链接到 vim.tiny 或类似路径
4. 用户界面
vi
:
界面简洁,适合快速编辑小文件,但对复杂任务(如编程)不够友好。vim
:
提供状态栏、行号显示、错误提示等,且支持鼠标操作(需在配置中启用set mouse=a
)。
实际使用场景
- 推荐
vi
的场景:- 紧急修复系统文件(例如在最小化安装的服务器环境中)。
- 推荐
vim
的场景:- 编程、编辑配置文件、需要语法高亮和多窗口操作的任务。
- 自定义配置(如通过
~/.vimrc
文件优化体验)。
总结
vi
:轻量、快速,适合基础编辑。vim
:功能全面,适合开发者和进阶用户。- 建议:在支持
vim
的环境中优先使用它,通过vimtutor
命令学习其强大功能。
vim 如何配置 编辑 python ?
以下是针对 Python 开发的 Vim 配置指南,涵盖语法高亮、自动补全、代码检查等常用功能:
1. 基础配置(.vimrc
文件)
在用户目录下创建或编辑 Vim 配置文件:
vim ~/.vimrc
添加以下基础配置:
" 通用设置
set number " 显示行号
set tabstop=4 " Tab 显示为 4 空格
set shiftwidth=4 " 自动缩进时每层缩进 4 空格
set expandtab " 将 Tab 转换为空格(符合 PEP8)
syntax on " 开启语法高亮
filetype plugin indent on " 根据文件类型加载插件和缩进规则" Python 专用设置
autocmd FileType python setlocal foldmethod=indent " 按缩进折叠代码
autocmd FileType python setlocal colorcolumn=80 " 显示第80列参考线(PEP8)
2. 插件管理(推荐使用 Vim-Plug)
(1) 安装插件管理器 Vim-Plug
在终端执行:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
(2) 在 .vimrc
中添加插件
在 ~/.vimrc
中添加以下内容:
call plug#begin('~/.vim/plugged')" Python 开发必备插件
Plug 'davidhalter/jedi-vim' " 自动补全和函数跳转
Plug 'vim-python/python-syntax' " 增强的 Python 语法高亮
Plug 'Vimjas/vim-python-pep8-indent' " 符合 PEP8 的缩进规则
Plug 'dense-analysis/ale' " 实时语法检查(支持 flake8/pylint)
Plug 'Yggdroot/indentLine' " 显示缩进参考线call plug#end()
(3) 安装插件
重启 Vim 后执行:
:PlugInstall
3. 关键插件配置
(1) Jedi-vim(自动补全)
在 .vimrc
中添加:
let g:jedi#popup_on_dot = 0 " 输入 `.` 时不自动弹出补全
let g:jedi#use_tabs_not_buffers = 1 " 使用标签页跳转定义
(2) ALE(语法检查)
配置检查工具(如 flake8
和 mypy
):
let g:ale_linters = {'python': ['flake8', 'mypy']}
let g:ale_fixers = {'python': ['black']} " 保存时自动用 black 格式化
let g:ale_fix_on_save = 1
确保已安装工具:
pip install flake8 mypy black
(3) Python 语法高亮增强
在 .vimrc
中启用增强高亮:
let g:python_highlight_all = 1
4. 虚拟环境支持
若使用虚拟环境(如 venv
或 conda
),在 .vimrc
中指定 Python 解释器路径:
let g:python3_host_prog = '/path/to/your/venv/bin/python3'
5. 调试支持(可选)
(1) 集成 pdb 调试
在代码中插入断点:
import pdb; pdb.set_trace()
在 Vim 中使用 :!python %
运行脚本,进入调试模式。
(2) 使用 vim-terminal
安装终端插件(如 vim-terminal
):
Plug 'vimlab/split-term.vim' " 添加至插件列表
在 Vim 中通过 :Term
打开终端,直接运行 Python 代码。
6. 学习资源
- 在 Vim 内学习基础操作:终端输入
vimtutor
- Jedi-vim 文档:
:help jedi-vim
- ALE 配置:
:help ale
通过以上配置,你的 Vim 将具备现代 Python IDE 的核心功能!
相关文章:
WSL 安装 Debian 12 后,Linux 如何安装 vim ?
在 WSL 的 Debian 12 中安装 Vim 非常简单,只需使用 apt 包管理器即可。以下是详细步骤: 1. 更新软件包列表 首先打开终端,确保系统包列表是最新的: sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim: sudo apt …...

电子数据取证(数字取证)技术全面指南:从基础到实践
为了后续查阅方便,推荐工具先放到前面 推荐工具 数字取证基础工具 综合取证平台 工具名称类型主要功能适用场景EnCase Forensic商业全面的证据获取和分析、强大的搜索能力法律诉讼、企业调查FTK (Forensic Toolkit)商业高性能处理和索引、集成内存分析大规模数据处…...

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
目录 Ubuntu使用Docker搭建SonarQube企业版(含破解方法)SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版(含破解方法ÿ…...
Spark SQL 之 Analyzer
Spark SQL 之 Analyzer // Special case for Project as it supports lateral column alias.case p: Project =>val resolvedNoOuter = p.projectList.map(resolveExpressionByPlanChildren(_, p...
c/c++数据类型转换.
author: hjjdebug date: 2025年 05月 18日 星期日 20:28:52 CST descrip: c/c数据类型转换. 文章目录 1. 为什么需要类型转换?1.1 发生的时机:1.2 常见的发生转换的类型: 2. c语言的类型转换: (Type) value2.1 c语言的类型变换是如何实现的? 规则是什么? 3. c 的static_cast…...

Django 项目的 models 目录中,__init__.py 文件的作用
在 Django 项目的models/init.py文件中,这些导入语句的主要作用是将各个模型类从不同的模块中导入到models包的命名空间中。这样做有以下几个目的: 简化导入路径 当你需要在项目的其他地方使用这些模型时,可以直接从models包导入,…...
实验六:FPGA序列检测器实验
FPGA序列检测器实验(远程实验系统) 文章目录 FPGA序列检测器实验(远程实验系统)一、数字电路基础知识1. 时钟与同步2. 按键消抖原理代码讲解:分频与消抖3. 有限状态机(FSM)设计代码讲解:状态机编码与转移4. 边沿检测与信号同步5. 模块化设计二、实验数字电路整体思想三…...

网络的知识的一些概念
1.什么是局域网,什么是广域网 局域网(Local area network)也可以称为本地网,内网,局域网有这几个发展经历: 最开始电脑与电之间是直接用网线连接的 再后来有了集线器() 再后来出…...

芋道项目,商城模块数据表结构
一、需求 最近公司有新的业务需求,调研了一下,决定使用芋道(yudao-cloud)框架,于是从github(https://github.com/YunaiV/yudao-cloud)上克隆项目,选用的是jdk17版本的。根据项目启动手册&#…...
yarn任务筛选spark任务,判断内存/CPU使用超过限制任务
yarn任务筛选spark任务,判断内存/CPU使用超过限制任务 curl -s “http://it-cdh-node01:8088/ws/v1/cluster/apps?statesRUNNING” | jq ‘.apps.app | map(select(.applicationType “SPARK” ) | select(.allocatedMB > 102400 or .allocatedVCores > 50)…...

【氮化镓】HfO2钝化优化GaN 器件性能
2025年,南洋理工大学的Pradip Dalapati等人在《Applied Surface Science》期刊发表了题为《Role of ex-situ HfO2 passivation to improve device performance and suppress X-ray-induced degradation characteristics of in-situ Si3N4/AlN/GaN MIS-HEMTs》的文章。该研究基…...
c#的内存指针操作(仅用于记录)
c#也可以直接操作内存指针,如下为示例: unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…...
常见机器学习算法简介:回归、分类与聚类
机器学习说到底,不就三件事: 预测一个数 —— 回归 判断归属哪个类 —— 分类 自动把数据分组 —— 聚类 别背术语,别管定义,先看问题怎么解决。 一、回归(Regression) 干嘛的? 模型输出一…...
SpringBoot项目里面发起http请求的几种方法
在Spring Boot项目中发起HTTP请求的方法 在Spring Boot项目中,有几种常用的方式可以发起HTTP请求,以下是主要的几种方法: 1. 使用RestTemplate (Spring 5之前的主流方式) // 需要先注入RestTemplate Autowired private RestTemplate restT…...
Linux下Nginx源码安装步骤详解
以下是在Linux系统下从源码安装Nginx的详细步骤及解释: 1. 下载Nginx源码 步骤: wget http://nginx.org/download/nginx-1.25.3.tar.gz tar -zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3解释: wget:从官网下载Nginx源码包&#…...

SQLMesh 增量模型从入门到精通:5步实现高效数据处理
本文深入解析 SQLMesh 中的增量时间范围模型,介绍其核心原理、配置方法及高级特性。通过实际案例说明如何利用该模型提升数据加载效率,降低计算资源消耗,并提供配置示例与最佳实践建议,帮助读者在实际项目中有效应用这一强大功能。…...

Zookeeper 入门(二)
4. Zookeeper 的 ACL 权限控制( Access Control List ) Zookeeper 的ACL 权限控制,可以控制节点的读写操作,保证数据的安全性,Zookeeper ACL 权 限设置分为 3 部分组成,分别是:权限模式(Scheme)、授权对象(…...

【架构篇】安全架构-双向认证
mTLS(Mutual TLS)详解:双向认证的原理、流程与实践 摘要 mTLS(Mutual TLS)是一种基于数字证书的双向身份验证协议,广泛应用于微服务通信、金融交易等高安全场景。本文深入解析mTLS的工作原理、认证流程、W…...

负载均衡—会话保持技术详解
一、会话保持的定义 会话保持(Session Persistence)是一种负载均衡策略,其核心机制是确保来自同一客户端的连续请求,在特定周期内被定向到同一台后端服务器进行处理。这种机制通过记录和识别客户端的特定标识信息,打破…...

Flask快速入门和问答项目源码
Flask基础入门 源码: gitee:我爱白米饭/Flask问答项目 - 码云 目录 1.安装环境2.【debug、host、port】3.【路由params和query】4.【模板】5.【静态文件】6.【数据库连接】6.1.安装模块6.2.创建数据库并测试连接6.3.创建数据表6.4.ORM增删改查 6.5.ORM模…...

go语法大赏
前些日子单机房稳定性下降,找了好一会才找到真正的原因。这里面涉及到不少go语法细节,正好大家一起看一下。 一、仿真代码 这是仿真之后的代码 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…...

软件工程各种图总结
目录 1.数据流图 2.N-S盒图 3.程序流程图 4.UML图 UML用例图 UML状态图 UML时序图 5.E-R图 首先要先了解整个软件生命周期: 通常包含以下五个阶段:需求分析-》设计-》编码 -》测试-》运行和维护。 软件工程中应用到的图全部有:系统…...
R-tree详解
R-tree 是一种高效的多维空间索引数据结构,专为快速检索空间对象(如点、线、区域)而设计。它广泛应用于地理信息系统(GIS)、计算机图形学、数据库等领域,支持范围查询、最近邻搜索等操作。以下是其核心原理…...

AAAI2024 | 基于特征多样性对抗扰动攻击 Transformer 模型
Attacking Transformers with Feature Diversity Adversarial Perturbation 摘要-Abstract引言-Introduction相关工作-Related Work方法-Methodology实验-Experiments结论-Conclusion 论文链接 本文 “Attacking Transformers with Feature Diversity Adversarial Perturbatio…...

关于数据湖和数据仓的一些概念
一、前言 随着各行业数字化发展的深化,数据资产和数据价值已越来越被深入企业重要发展的战略重心,海量数据已成为多数企业生产实际面临的重要问题,无论存储容量还是成本,可靠性都成为考验企业数据治理的考验。本文来看下海量数据存储的数据湖和数据仓,数据仓库和数据湖,…...
鸿蒙OSUniApp制作自定义的下拉菜单组件(鸿蒙系统适配版)#三方框架 #Uniapp
UniApp制作自定义的下拉菜单组件(鸿蒙系统适配版) 前言 在移动应用开发中,下拉菜单是一个常见且实用的交互组件,它能在有限的屏幕空间内展示更多的选项。虽然各种UI框架都提供了下拉菜单组件,但在一些特定场景下&…...
C++面试2——C与C++的关系
C与C++的关系及核心区别的解析 一、哲学与编程范式:代码组织的革命 过程式 vs 多范式混合 C语言是过程式编程的典范,以算法流程为中心,强调“怎么做”(How)。例如,实现链表操作需手动管理节点指针和内存。 C++则是多范式语言,支持面向对象(OOP)、泛型编程(模板)、函…...

常用的Java工具库
1. Collections 首先是 java.util 包下的 Collections 类。这个类主要用于操作集合,我个人非常喜欢使用它。以下是一些常用功能: 1.1 排序 在工作中,经常需要对集合进行排序。让我们看看如何使用 Collections 工具实现升序和降序排列&…...
基于LabVIEW的双音多频系统设计
目录 1 系统设计概述 双音多频(Dual-Tone Multi-Frequency, DTMF)信号是一种广泛应用于电话系统中的音频信号,通过不同的频率组合表示不同的按键。每个按键对应两个频率,一个低频和一个高频,共同组成独特的信号。在虚拟仪器技术快速发展的背景下,利用LabVIEW等图形化编程…...

R S的EMI接收机面板
图片摘自R & S官网。 根据您提供的第一张图(设备前面板带屏幕的图像),这是 Rohde & Schwarz ESRP7 EMI Test Receiver 的正面显示界面,我将对屏幕上显示的参数逐项进行解读: 🖥️ 屏幕参数解读 左…...