vim光速开发,你值得拥有

news2024/12/28 20:09:57

文章目录

  • vim设计哲学
  • vim的模式
  • 什么是可视模式
  • 光标移动
  • 动作(motion)
  • 操作符(operator)
  • 操作符(operator)+动作(motion)实际使用
  • 大小写转换
  • easymotion
  • vim-surround
  • TIPS
  • ideavim的使用

vim设计哲学

在这里插入图片描述
vim被称为编辑器之神。它的成名就是因为文本操作非常的高效。

vim通过划分不同的模式,使按键在不同的模式下有不同的作用。这样的好处就是可以使用更少的键完成同样的操作。

操作符就是说告诉vim我们要干什么,而动作就是告诉vim怎么干。

在这两个因素的作用下就使我们的开发变得非常高效!

vim的模式

vim有如下四种模式:
在这里插入图片描述

这几种模式之间可以相互转换,例如在普通模式和插入模式之间有如下几种转换的方法
在这里插入图片描述

o代表的是open a new line
i代表的是insert
a代表的是append

在这里插入图片描述

注意这里的jj和CapsLock需要在配置文件中进行映射,否则不一定会生效
在这里插入图片描述

在普通模式和可视模式之间进行转化的途径如下:
在这里插入图片描述
在这里插入图片描述

普通模式和命令模式的转换途径如下:
在这里插入图片描述

什么是可视模式

这里我们多提一句什么是可视模式:

在 Vim 中,可视模式用于选择文本,这与在 GUI 文本编辑器中通过鼠标单击并拖动以选择文本操作来选择文本的 Vim 等效。

Vim 中的可视模式允许您选择文本,但可视模式的不同子集将很有用,具体取决于您要如何选择文本。

Vim 中有 3 个可视模式子集:

  • Visual [Character] 模式:用于选择单个字符
  • 视觉线模式:用于一次选择整条线
  • 可视块模式:用于选择块状矩形形状的文本

如果要切换到可视模式,则需要先进入普通模式:

  • 视觉模式:(v小写’v’)
  • 视觉线模式:(V大写“V”)
  • 视觉块模式:Ctrl + v

当你切换到可视模式时,Vim 会给你一些细节,它将显示您处于哪种模式以及您选择的文本数量。

进入可视模式后,选择从光标点开始,您可以使用导航键 h/j/k/l 移动它,w/e/b 键跳过单词。

当您对选择感到满意时,您可以执行删除、拉取和替换等操作。

光标移动

以字母为单位

在普通模式下光标向上下左右移动的按键如下:
在这里插入图片描述

这个不用记,自己多用几遍就熟了

以单词为单位

在这里插入图片描述

这里我们一般b、e用的多:

  • b代表begin
  • e代表end

行首、行尾的跳跃

在这里插入图片描述

字符间的跳跃
在这里插入图片描述
;,我们可以简单地理解为前一个、后一个

动作(motion)

首先我们来区分一下i(insert)和a(around)的区别,我们可以通过如下几个例子来理解:
在这里插入图片描述

然后我们来看一下一些基本的动作(motion):
在这里插入图片描述

操作符(operator)

操作符就是告诉vim我们要干什么,这里我们说说最常用的几个操作符;
在这里插入图片描述

操作符(operator)+动作(motion)实际使用

下面我们举几个例子:

在这里插入图片描述
如果我们要修改HelloWorld,我们可以使用:c iw

在这里插入图片描述

如果我们要修改泛型,可以使用c iw 或者 c i<
如果我们要删除泛型,可以使用d i<,d iw或者d a<

在这里插入图片描述
如果我们要删除返回值,可以使用d i{或者d iB

B是bracket的缩写

在这里插入图片描述
删除两行,使用2dd

在这里插入图片描述

  • 删除到s:d fs
  • 修改到s:c fs
  • 复制到s:y fs

在这里插入图片描述
也就是操作符配合我们的^$使用

如果要删除、修改、复制整个文件,就是操作符配合e使用:

  • d ie
  • c ie
  • y ie

如果要对html中的标签进行操作,我们可以动作t,例如现在我们想删除并编辑div内的所有内容:
在这里插入图片描述
我们可以把光标移到div中,然后按c it即可

在这里插入图片描述
我们将当前单词进行选中然后复制:v iw y

大小写转换

相关操作如下图:
在这里插入图片描述

easymotion

在这里插入图片描述
leader在这里我们设定为空格space键

vim-surround

在这里插入图片描述

TIPS

测试环境:vscode

在这里插入图片描述
我们要查看当前函数的定义:g d(go to definition)
调回来使用:ctrl -

在这里插入图片描述
有些方法上鼠标悬浮会有注释,如果你想看的话可以使用:g h

跳转标签页:
往前跳:g T
往后跳:g t

往后跳四个:4 g t

跳转到左边的项目栏:
command 1

如果是分页的跳转则使用:
command 2
或者在命令行使用:
tabntabp

ideavim的使用

ideavim是一个基于IntelliJ平台的vim插件

我们第一次使用的时候除了安装ideavim插件之外,可以把easymotion这个插件也下载了。

然后我们点击右下角的那个绿色的V字,再点击open打开我们的ideavimrc配置文件。

一开始打开是空的,我们可以自己进行配置,也可以使用如下的配置文件;

"==========================================
" Author:  hank.zhao
" Version: 0.1
" Email: hxzhenu@gmai.com
" Desc: my ideavim config file
"==========================================
" set leader key
nnoremap <SPACE> <Nop>
let mapleader = " "

" search
set hlsearch
set incsearch
set smartcase
set ignorecase
set showmode
set de=on
set scrolloff=5

" plugins
set ideamarks
set easymotion
set surround
set argtextobj
set multiple-cursors
" Remap multiple-cursors shortcuts for Mac
nmap <C-n> <Plug>NextWholeOccurrence
xmap <C-n> <Plug>NextWholeOccurrence
nmap <C-x> <Plug>SkipOccurrence
xmap <C-x> <Plug>SkipOccurrence
nmap <C-p> <Plug>RemoveOccurrence
xmap <C-p> <Plug>RemoveOccurrence
nmap <S-C-n> <Plug>AllWholeOccurrences
xmap <S-C-n> <Plug>AllWholeOccurrences

set exchange
set highlightedyank
set textobj-entire
set keep-english-in-normal-and-restore-in-insert
set NERDTree
set ReplaceWithRegister
" basic key mapping
nnoremap L $
vnoremap H ^
nnoremap H ^
vnoremap L $
nnoremap ; :
nnoremap ` ,

inoremap jk <esc>
" nerdtre
map <leader>e :action SelectInProjectView<CR>
nnoremap <leader>d :NERDTreeFocus<CR>


""" Idea specific settings ------------------
set ideajoin
set idearefactormode=keep

" clear the highlighted search result
nnoremap <Leader>sc :nohlsearch<CR>

" easymotion
map <leader>f <Plug>(easymotion-s)


" Window operation

nnoremap <leader>ww <C-W>w
nnoremap <leader>wd <C-W>c
nnoremap <leader>wj <C-W>j
nnoremap <leader>wk <C-W>k
nnoremap <leader>wh <C-W>h
nnoremap <leader>wl <C-W>l
nnoremap <leader>ws <C-W>s
nnoremap <leader>w- <C-W>s
noremap <leader>wv <C-W>v
nnoremap <leader>w\| <C-W>v

" copy and paste
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>P "0p
vnoremap Y "+y

" Tab operation
nnoremap tn gt
nnoremap tp gT

" Insert mode shortcut
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-d> <Delete>

" Quit normal mode
nnoremap <Space>q  :action CloseProject<CR>
nnoremap <Space>Q  :qa!<CR>

" edit vimrc
nnoremap <leader>ve :e ~/.ideavimrc<CR>
nnoremap <leader>vw :w!<CR>
nnoremap <leader>vs :source ~/.ideavimrc<CR>

" intellij built in key map

nnoremap <leader>a :action GotoAction<CR>
nnoremap <leader>b :action Bookmarks<CR>
nnoremap <leader>c :action GotoClass<CR>
"nnoremap <leader>e :action SearchEverywhere<CR>
"nnoremap <leader>f :action FindInPath<CR>
nnoremap <leader>gc :action Git.CompareWithBranch<CR>
nnoremap <leader>ga :action Annotate<CR>
nnoremap <leader>gh :action Vcs.ShowTabbedFileHistory<CR>
nnoremap <leader>nj :action NewClass<CR>
nnoremap <leader>nt :action Kotlin.NewFile<CR>
nnoremap <leader>r :action RecentFiles<CR>

" build and compile code
nnoremap <leader>mr :action Maven.Reimport<CR>

"toggle something
"toggle track vim action Id
nnoremap ta :action VimFindActionIdAction<CR>

" run and debug
nnoremap ,d :action Debug<CR>
nnoremap ,r :action Run<CR>
nnoremap ,c :action CompileDirty<CR>
nnoremap ,b :action ToggleLineBreakpoint<CR>
nnoremap ,v :action ViewBreakpoints<CR>
nnoremap ,s :action Stop<CR>
" navigation
nnoremap gs :action GotoSuperMethod<CR>
nnoremap gb :action JumpToLastChange<CR>
nnoremap gi :action GotoImplementation<CR>
nnoremap gd :action GotoDeclaration<CR>
nnoremap gf :action FileStructurePopup<CR>

" code actions
nnoremap U :action FindUsages<CR>
nnoremap R :action RenameElement<CR>
nnoremap == :action ReformatCode<CR>
vnoremap = :action ReformatCode<CR>
nnoremap -- :action OptimizeImports<CR>
nnoremap cc :action CommentByLineComment<CR>
vnoremap cc :action CommentByLineComment<CR>

接下来我们稍微解释一下这个配置文件;
在这里插入图片描述
这里配置的是搜索的一些内容,例如什么高亮搜索,模糊搜索,忽略大小写搜索等,我们可以来试一下:

我们搜索leader默认是忽略大小写的,但是我们如果使用的是驼峰那就可以严格匹配:

在这里插入图片描述
在这里插入图片描述
然后进行了插件的配置:
在这里插入图片描述
这个easy是让我们快速抵达想要到的地方,例如我们现在想快速到达下图位置:
在这里插入图片描述

两个空格+ f + 相关字符 然后按照提示选择即可

surround插件的作用就是让你快速在某一部分的周围做出操作,这里不做出具体介绍,可以自行在网上查看教程。

接下来是一些基础按键的映射;
在这里插入图片描述

  • nnoremap代表normal模式
  • vnoremap代表visual模式

在这里插入图片描述
这里配置的是取消高亮 空格+sc 也就是searchclear

在这里插入图片描述
然后是一些窗口操作;
在这里插入图片描述
这里是复制粘贴到剪切板的操作

在这里插入图片描述
切换导航栏的操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python文档阅读笔记-Turn Images into Cartoons using Python

本博文说明如何将图片转为卡通风格。 1. 导入依赖模块 在编程的第一步首先要导入依赖库&#xff0c;在这个图像转换成卡通风格的程序中需要包含3个模块&#xff0c;分别是openCV&#xff0c;numpy&#xff0c;matpoltlib。 import cv2 import numpy as np import matplotlib.…

solidity Dapp 基于merkle的选择性披露合约——我的还是我的

现在生活中&#xff0c;大家为了隐私&#xff0c;并不希望直接将个人信息给别人看&#xff0c;比如我们去住酒店时&#xff0c;需要登记姓名、身份证号信息&#xff0c;但是如果我们直接把身份证给前台人员的话&#xff0c;前台人员就可以看到我们的民族、住址等信息。那么我们…

搭建我的世界java版服务器,公网远程联机【内网穿透】

文章目录1. 搭建我的世界服务器1.1 服务器安装java环境1.2 配置服务端2. 测试局域网联机3. 公网远程联机3.1 安装cpolar内网穿透3.1.1 windows系统3.1.2 linux系统&#xff08;支持一键自动安装脚本&#xff09;3.2 创建隧道映射内网端口3.3 测试公网远程联机4. 配置固定TCP端口…

利用mybatis对数据库中的数据进行增删改查操作

写在前面&#xff1a; 本篇文章的代码都是在上一篇文章的基础上增删改&#xff0c;本篇文章并不会出现所有的代码&#xff0c;如有需求可参考上篇文章传送门 namespace中的包名要和Dao/mapper接口的包名一致&#xff1a; 假设此时我们将接口名进行修改&#xff0c;而不改变映…

windows系统,计算机cmd管理员,命令行中普通用户获取管理员权限的命令

文章目录一、第一种方式&#xff1a;搜索框搜索二、第二种方式&#xff1a;winR &#xff08;这种方式作者没有找到进入管理员的方式&#xff09;三、普通方式进入&#xff0c;通过命令授予用户权限四、通过开始右键进入cmd参考文档一、第一种方式&#xff1a;搜索框搜索 以管理…

JLINK与 SWD接口

JLINK与 SWD接口 1.使用Jlink连接 Jlink驱动&#xff1a;SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace pylink文档&#xff1a;PyLink — PyLink 2.读取内存地址 3.获取内存地址的默认值 register.py 芯片配置&#xff1a; 环境搭建 1.按章Jlink 驱动…

搭建一个简单的负载均衡

前言&#xff1a; 负载均衡是互联网系统架构中必不可少的一个技术&#xff0c;通过负载均衡&#xff0c;可以将高并发的用户请求分发到多台应用服务器组成的一个服务器集群上&#xff0c;利用更多的服务器资源处理高并发下的计算压力。 早期负载均衡的实现&#xff0c;使用专…

[Linux]Linux调试器-gdb

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…

HCIA实验(作业)

静态路由综合实验报告 实验目的 建立下图拓扑结构并满足下列要求&#xff1a; 除R5的环回地址固定以外&#xff0c;整个其他所有网段基于192.168.1.0/24进行合理的IP地址划分 R1–R4每个路由器存在两个环回接口&#xff0c;用于模拟连接PC网段&#xff0c;地址也在192.168.1.0…

使用服务网格提升应用和网络安全

当今的企业在正常进行经营的同时&#xff0c;也在不断地与潜在的黑客和不良行为者进行斗争。安全边界逐渐消失&#xff0c;攻击面不断扩大&#xff0c;新的攻击向量不断出现。再加上持续的疫情、全球冲突&#xff0c;难怪每天新闻里都有漏洞、黑客和攻击等内容。 云原生和微服…

低代码平台的七大误解(下)

接上一篇文章“低代码平台的三大误解&#xff08;上&#xff09;”&#xff0c;我们继续看看&#xff0c;人们对于低代码平台还有哪些误解。 误解四&#xff1a;低代码应用程序只能解决我的部分问题 无论您构建什么应用程序&#xff0c;它都必须是可以随着业务增长而扩展的可…

Linux应用编程---2.fork()函数

Linux应用编程—2.fork()函数 ​ fork()函数用来创建子进程&#xff0c;函数具体功能与使用方法一起看编程手册。Linux终端命令下输入&#xff1a;man fork&#xff0c;敲击回车键即可打开fork函数详情页。 2.1 fork()函数详情 图1 fork函数详情首先看SYNOPSIS: 图2 fork函数…

一分钟带你上手JS对象的基本用法

前言 相信大家对 JavaScript 中的对象都不陌生&#xff0c;而且我们几乎每天都在使用它&#xff0c;那你对对象的认识有多少呢&#xff1f;本章就带大家一起出浅入深的了解 JavaScript 中的对象。 一、什么是对象&#xff1f; 到底什么是对象呢&#xff1f;大多数人可能都会脱…

生物信息学——基础篇——一至三代测序技术

生物信息学 生物信息学——基础篇——一至三代测序技术 文章目录生物信息学一、一代测序二、二代测序三、三代测序四、总结一、一代测序 概述&#xff1a;一代测序&#xff08;又称Sanger测序&#xff09;。 原理&#xff1a;Sanger测序利用一类特殊的核昔酸&#xff0c;即dd…

imx6ull内核添加exfat,并自动开机加载

下载地址&#xff1a;https://github.com/dorimanx/exfat-nofuse.git 方式一&#xff0c;移植到内核&#xff0c;通过内核开启 1、下载exfat源码&#xff08;将源码目录设置成exfat方便修改&#xff09;&#xff0c;将其放到内核的fs目录下 2、修改fs目录下的Kconfig文件 3、…

Go语言设计与实现 -- GC的简要介绍

GC实现原理 什么是GC&#xff1f; 垃圾回收也称为GC&#xff08;Garbage Collection&#xff09;&#xff0c;是一种自动内存管理机制 现代高级编程语言管理内存的方式分为两种&#xff1a;自动和手动&#xff0c;像C、C 等编程语言使用手动管理内存的方式&#xff0c;工程师…

OpenHarmony 标准系统 HDF 框架音视频驱动开发

OpenHarmony 标准系统 HDF 框架音视频驱动开发引言OpenHarmony 音频概述HDF 音频驱动框架概述HDF 音频驱动框架分析 —— 音频设备驱动HDF 音频驱动框架分析 —— supportlibs 实现HDF 音频驱动框架分析 —— hdi-passthrough 实现HDF 音频驱动框架分析 —— hdi-binder 实现HD…

从零开始计算机网络——计算机网络课程的了解初步认识计算机网络

目录 &#x1f358;计算机网络学科到底学什么&#xff1f; &#x1f9c7;两个参考模型的介绍 &#x1f96a;OSI参考模型&TPC参考模型&五层参考模型 &#x1f371; 计算机网络学科的重难点——网络协议 &#x1f958;如何学好计算机网络课程&#xff1f; &#x1f363;相…

Java使用BigDecimal(公式精确计算)+(精度丢失问题)

一、Java使用BigDecimal公式计算(精确计算) 介绍: 使用BigDecimal加减乘除方法运算&#xff0c;可以使用BigDecimal类提供的add、subtract、multiply、divide方法函数实现。 公式加法计算~add public static void main(String[] args){BigDecimal a BigDecimal.valueOf(5.6);…

动态规划合集

62 斐波那契数列 public class Solution {public int Fibonacci(int n) { return f(n);}public int f(int n){if(n1||n2){return 1;}return f(n-1)f(n-2);} }这种做法时间复杂度O(2^N),空间复杂度是用递归栈&#xff0c;O(n) 改进&#xff1a;用动态规划&#xff0c;可以…