8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
插件的使用(后面会用到,可以先跳过不看)
vim-plug插件
安装(mac终端上安装)1
2curl -fLo ~/.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
我们的第一个插件-startify打开vimrc,终端 ~ 目录下输入:
新建.vimrc配置文件1vim .vimrc
参数说明:call plug#begin(‘~/.vim/plugged’) //插件开始
Plug ‘mhinz/vim-startify’ //以后的安装插件方式,基本就是把github链接的最后两个路径输入即可
call plug#end() //插件结束
在vimrc配置文件中,输入:1
2
3
4
5call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify'
call plug#end()
进入command模式::w
:source .vimrc
:PlugInstall
:wq
之后在终端输入:1vim
然后就可以看到这个界面了:
如果出现打不开的情况,startify: Can't read viminfo file. Read :help startify-faq-02
在终端下执行:chmod 777 .viminfo
vim .viminfo
:wq
即可解决
如何搜寻自己需要的插件
清除插件
.vimrc的command下执行::PlugClean
.vimrc文件的配置
作用:让配置持久化,不用每次进入vim都要打开显示行数等的操作
在终端执行以下两个命令:cd ~
vim .vimrc
.vimrc一些常用的设置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16set number
syntax on
" 高亮搜索
set hlsearch
" 设置折叠格式
set foldmethod=indent
" 使用jj 进入normal模式
inoremap jj `^
" 一些方便的映射
let mapleader=','
let g:mapleader=','
" 使用 leader + w 直接保存
inoremap w :w
nnoremap w :w
以下内容可以选择自己需要的补充进来:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
colorscheme molokai " 设定配色方案
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set tabstop=4 " 设定 tab 长度为 4
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
filetype plugin indent on " 开启插件
set backupcopy=yes " 设置备份时的行为为覆盖
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
" set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
" set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set guioptions-=T " 隐藏工具栏
set guioptions-=m " 隐藏菜单栏
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start
" 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline= %
" 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为
" set foldclose=all " 设置为自动关闭折叠
" nnoremap @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')
" 用空格键来开关折叠
vim的四种模式normal模式(进入vim后的默认模式)
insert模式
command模式
visual模式
如何进入command模式
normal模式下按下:
如何进入insert模式:
小写:i : 在当前位置的前一个空隙插入
a: 在当前位置的后一个空隙插入
o: 在当前行的下一行插入
gi:快速进入insert模式并跳转到最后一次编辑的地方
大写:I : 在行首插入
A: 在行尾插入
O:在当前行的上一行插入
如何进入visual模式:v: 区域选取
V:行选取
ctrl + v:块选取
退出insert/visual模式:左上角的 ESC
ctrl + [
光标的移动
基本移动h:左移
j:右移
k:下移
l:上移
word移动w:下一个word的开头
e:下一个word的结尾
W:下一个WORD的开头
E:下一个WORD的结尾
b:上一个word的开头
B:上一个WORD的开头
注意:WORD指的是以空格为单位进行移动
行间搜索移动
在normal模式下:f + 字符 分号/逗号跳转到下一个/上一个,大写的F表示反过来搜索前面的字符
水平移动0:移动到行首
$:移动到行尾
页面的移动gg/G:移动到文件的开头/结尾
H/M/L:跳转到屏幕的开头(Head)/中间(Middle)/结尾(Lower)
Ctrl + o:快速返回
Ctrl + u:向上翻页
Ctrl + f:向下翻页
zz:把屏幕置为中间
插件:快速移动光标不懂如何使用插件的童鞋直接跳转到本文章的插件位置,有详细使用过程。
映射(快捷键 ss):nmap ss (easymotion-s2)
复制粘贴
normal模式下:y和p 进行复制
d和p 进行剪贴
yiw 复制一个单词
yy 复制一行
提示:可以进入visual模式选中要操作的区域进行复制或者剪贴的操作
insert模式下:
假如粘贴代码出现缩进混乱的情况解决方案:出现这种情况一般是因为设置了autoindent
步骤::set paste
粘贴
:set nopaste
提示:是不是感觉很麻烦?其实可以用映射来处理
寄存器
其实,复制与剪切下来的内容,都被临时的放在了“无名寄存器”中
我们可以利用寄存器进行复制粘贴的操作
示例:把内容保存到寄存器:“ayiw 复制一个单词到寄存器a中
“bdd 删除当前行到寄存器b中
查看寄存器:reg + 寄存器名称
粘贴:“ap 粘贴寄存器a中的内容
“bp 粘贴寄存器b中的内容
如何将vim里的内容复制到系统剪贴板:首先要确保系统中有 clipboard(我的vim里没有,不知道如何安装):echo has(‘clipboard’)
结果为“1”,表示存在
一般使用v/V选择内容
“+y 表示复制到了系统剪贴板
把其他位置的内容复制到vim中:首先要确保系统中有 clipboard
:set clipboard=unnamed
直接按下p进行粘贴
删除
insert模式下(linux命令行下通用):ctrl + h:删除上一个字符
ctrl + w:删除上一个单词
ctrl + u:删除当前行光标前的所有内容
normal模式下:dd:删除当前行
x/X:删除后/前一个字符
dw:删除后一个word
dW:删除后一个WORD
db:删除前一个word
dB:删除前一个WORD
daw:删除一个单词(包括空格)
diw:删除一个单词(不包括空格)
dip:删除一个段落
特殊操作:1
2def ():
print("hello world")
移动光标到要修改的位置:viw:选中一个单词
vi + “ //选中双引号中的内容
ci + “ //删除双引号中的内容并进入插入模式
局部删除:如果想删除(hello world)括号里面的所有内容:dt) //意思是删除,直到遇到这个括号
如果想删除光标后面的所有内容:VGd
如果想删除当前行的光标前面所有内容:d0
如果想删除当前行的光标后面所有内容:d$
其实所有删除的命令都可以结合数字来重复执行
例如:4dd:删除下面4行
5x:删除后面5个字符
查询
字符串的查询:
normal 模式下:/ + word:前向搜索
? + word:后向搜索
使用n/N跳转到下一个/上一个
插件:文件的查询
文件管理器
模糊搜索器(ctrlp)最好提前将目录移动至根目录下,方便全局搜索
更加强大的模糊搜索工具:fzf.vim
撞上插件以后会发现Ag无法使用
解决办法:mac下需要安装(直接在终端执行下面两个语句):1
2
3/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install the_silver_searcher
然后Ag就可以使用了1
2
3
4
5wget https://github.com/ggreer/the_silver_searcher/archive/2.2.0.tar.gz
tar -xf 2.2.0.tar.gz
cd the_silver_searcher-2.2.0
sh build.sh
make install
然后进入vim执行Ag命令时有可能提示要更新,输入 y 即可,之后Ag就可以使用了
语法::Ag 回车 输入字符串 (提示:最好是提前切换好目录,不然文件太多)
:Files 回车 输入文件名称 (例子:Files /hello.py ,表示从根目录下,搜索名为hello.py的文件,如果输入一个目录名字的话,会把该目录下的所有文件展示出来)
替换
normal模式下的局部替换:r + 字符:替换为输入的字符
s:删除当前字符并进入插入模式
R:从左到右连续替换字符
S:删除当前行并进入插入模式
caw:删除当前单词,并进入插入模式
c + 命令有很多,可以自己研究一下:
例子:t和f两个字母的含义:f:find
t:till
经过我的测试可以和 v配合使用:v + f + 字符:选中后面内容直到找到那个字符(也删选中那个字符)为止
v + t + ":选中后面的内容直到找到 “ (不选中”)为止
c + f + 字符:删除后面内容直到找到那个字符(也删除那个字符)为止,并进入插入模式
c + t + ":删除后面的内容直到找到 “ (不删除”)为止,并进入插入模式
搜索替换
格式:[range] s /{pattern}/{string}/[flags]range 表示范围 比如 10,20 表示10-20行,%表示全部
pattern 为要替换的模式,string 为替换后文本
g(global):表示全局范围内执行
n(number):报告匹配到的次数而不进行替换,可以用来查询匹配次数
例子::% s/word1/word2/g
正则表达式的应用:1
2def do_quack(ducker):
ducker.quack()
这种情况下只想替换函数里面的quack,而不替换函数名称包含quack的do_quack话,可以这样做::% s//word/g
插件
vim-surround(成对替换)
语法:ds 删除
cs 替换
ys 添加
例子:print(“hello world”) #ds "
print(“hello world”) #cs " '
print(hello world)其中有很多空格的话用这个 ys vf) "这一种光标要移动到句子开头
只有一个单词的话用这个 ys iw "
多文件批量替换
语法::Far {被替换的词} {要替换成的词} 路径
注意,只能替换输入的路径中的文件内容,比如输入 / ,并不是替换根目录下的全部包括其下所有目录中的文件,而是只替换根目录下的文件内容*
例子:vim /tmp/hello.py
print(“hello world”)
:Far hello hi /tmp/*.py 或者 :Far hello hi /tmp/
:Fardo //确认替换
多文件操作
首先提一个概念-Buffer:Buffer 是指打开的一个文件的内存缓冲区
窗口是buffer可视化的分割区域
tab 可以组织窗口为一个工作区
在文件中的修改都是针对内存中的缓冲区,并不会直接保存到文件
直到我们执行 :w 的时候才会把修改内容写入到文件里
如何切换Buffer::ls //查看缓冲区
:b n //跳转到第n个缓冲区
:bpre //跳转到上一个缓冲区
:bnext //跳转到下一个缓冲区
:bfirst //跳转到第一个缓冲区
:blast //跳转到最后一个缓冲区
:b buffer_name + tab补全
如何在一个buffer中打开其他的文件::e 文件名
窗口:
一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区s 水平分割 //或者sp
v 垂直分割 //或者vs
切换窗口:w //循环切换窗口
h/j/k/l //左/下/上/右切换窗口
移动窗口:H/L //左右移动窗口
标签页:tabe + filename //在新的标签页中打开文件
:T //把当前窗口移动到一个新标签页
:tabc //关闭当前标签页及其中的所有窗口
:tabo //只保留活动标签页,关闭其他所有标签页
gt //切换标签页
“宏”的使用方法
宏就像是拍电影😂
q(开始) + 寄存器名称 + {操作} + q(退出)
例子:
给所有的行首尾加上双引号:1
2
3
4
5
6
7
8
9
10
11
12www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com录制过程:qaI"A"q
录制完成后输入 @a 即可给光标所在行执行相同的操作问题:这样一行一行的重复操作很麻烦,怎么办呢?
方法:VG 把光标下的所有行选中
进入command模式
:normal @a
即可给所有行执行相同的操作
屌不屌🐂
补全
ctrl + n/p 补全单词
ctrl + xf 补全文件名
补充:
插入当前文件名 :r! echo %
插入当前文件完整路径 :r! echo %:p
映射
递归映射(极度不推荐,有可能会出现map连锁)
进入command模式下::map - x //按下 - 等于 x 来删除字符
:map viw //按下空格选中单词
:map dd //按下 ctrl + d 来删除一行
map默认下是normal下的映射nmap //normal模式下的map
vmap //visual模式下的map
imap //insert模式下的map
之所以不推荐使用递归的map,是因为以下这种情况
map - dd
map -
非递归映射(用这个即可)nnoremap
inoremap
vnoremap
vim的配色和美化
配色方法::colorscheme 显示当前的主题配色,默认是default
:colorscheme 显示所有的配色
:colorscheme + 名称 更换配色
插件美化