前期使用自己配置的nvim,虽然还算顺手,但这玩意儿总觉得缺点啥,越配置越复杂,然后逐渐感觉没意思,最终索性使用了lvim省心。虽然lvim省心,且编写过程还能提醒错误,但是不能实现方便的跳转了,现在还在使用,当想要跳转的时候再换回lvim。简单记录下过程:
前期学习vim的用法,用熟了指令
在进入家目录下的 .vim文件夹,新建vimrc 文件,
noremap 来重新改键位。
map R :source $MYVIMRC
df+符号 直接从当前位置删除到你指定的符号
split 上下分屏
vsplit 左右分屏
d3删除右面三个字符
y2赋值右面两个字符
c6更改右面6个字符并进入写入模式
cw 从当前字符开始,直接更改这个词并进入写入模式
b回到首字母处
ciw 光标处于词中,直接更改这个词并进入写入模式(i可以理解为in)
ci” 光标处于引号内,可以直接删除引号内的内容
yi” 光标处于引号内,复制双引号内的内容
di” 光标处于引号内,删除双引号内的内容
fv 光标去找最近的下一个v字符位置
按下0可以回到句首
df: 一直删除到:
yf: 从当前字符复制到:所在字符
cf: 一直删除到:并进入写入模式
决定配置neovim,用vimplug做包管理器
更新vim:参考这篇文章:很简单,更新到9.0了哇塞。
更新nvim:参考这篇文章。
安装vimplug
sudo apt-get install curl 安装curl
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'来下载安装vimplug
apt-get install neovim 安装neovim
通过
~/.config/nvim/
创建目录
通过
nvim ~/.config/nvim/init.vim
创建配置文件(后面都需要用nvim打开文件了)
在该配置文件内通过 imap
和 nmap
修改在插入模式和正常模式下的键位。
这样安装插件:
call plug#begin()
在这个中间放置插件
call plug#end()
先保存文件,然后输入大写的R,后通过在命令行输入: PlugInstall命令,就进入了插件下载操作。一般得尝试几次才能成功。
进入nvim 后,输入help: 插件名称 就打开了插件的帮助文档
下面是我最初使用的配置文件:
0 let mapleader=" "
1 syntax on
2 set hlsearch
3 exec "nohlsearch"
4 set incsearch
5 set ignorecase
6 set smartcase
7 set number
8 set cursorline
9 set wrap
10 set showcmd
11 set wildmenu
12 set relativenumber
13 set laststatus=2
14 set tags=/mnt/liuxu/tags
15
16 noremap J 5j
17 noremap K 5k
18
19 noremap <LEADER><CR> :nohlsearch<CR>
20
21 map S :w<CR>
22 map R :source $MYVIMRC<CR>
23
24
25 call plug#begin()
26 Plug 'scrooloose/nerdtree'
27 Plug 'vim-airline/vim-airline'
28 Plug 'bling/vim-bufferline'
29 Plug 'connorholyday/vim-snazzy'
30 call plug#end()
31
32 let g:bufferline_echo = 1
33 let g:bufferline_active_buffer_left = '['
34 let g:bufferline_active_buffer_right = ']'
35 let g:bufferline_rotate = 1
36 let g:airline#extensions#tabline#buffer_idx_mode = 1
37 nmap <leader>1 <Plug>AirlineSelectTab1
38 nmap <leader>2 <Plug>AirlineSelectTab2
39 nmap <leader>3 <Plug>AirlineSelectTab3
40 nmap <leader>4 <Plug>AirlineSelectTab4
41 nmap <leader>5 <Plug>AirlineSelectTab5
42 nmap <leader>6 <Plug>AirlineSelectTab6
43 nmap <leader>7 <Plug>AirlineSelectTab7
44 nmap <leader>8 <Plug>AirlineSelectTab8
45 nmap <leader>9 <Plug>AirlineSelectTab9
46
47
48 color snazzy
49 let g:SnazzyTransparent = 1
50 map <silent> <C-e> :NERDTreeToggle<CR>
备注:
- 在配置文件之前,在终端输入 nvim 打开 neovim 。直接键盘输入 :checkhealth ,然后按下回车执行来检查依赖是否齐全:
- 文档中的 可以避免一些频繁且不会出错的操作一直不停输出显示
然后我开始完善功能,安装字体,设置buffer功能,增加各种好玩的插件,如下:
插件介绍:Plug ‘junegunn/fzf’ 快速查找文件
前面已经介绍,更多功能还需进一步使用。
插件介绍:Plug ’ bling/vim-bufferline’
超级简单的vim插件,可在命令栏中显示缓冲区列表。如下图
配置
:help bufferline
有几个可用的配置值(以其默认值显示):
表示缓冲线是否应自动回显到命令栏
let g:bufferline_echo = 1
缓冲区左侧使用的分隔符
let g:bufferline_active_buffer_left = ‘[’
缓冲区右侧使用的分隔符
let g:bufferline_active_buffer_right = ‘]’
表示缓冲区已修改的符号
let g:bufferline_modified = ‘+’
表示是否应显示缓冲区编号
let g:bufferline_show_bufnr = 1
指示缓冲线是否应该旋转
" 默认,不旋转,不滚动
let g:bufferline_rotate = 0
" 以固定的当前缓冲区位置滚动
let g:bufferline_rotate = 1
" 在没有固定当前缓冲区位置的情况下滚动
let g:bufferline_rotate = 2
插件介绍:Plug ‘connorholyday/vim-snazzy’
这个是设置透明的,因为我使用的mobaxterm登录,不是本机的vim,所以即使是透明的我也看不出来,等自己有了自己的linux电脑再设置吧。
插件介绍:Plug 'mhinz/vim-startify’
就开始nvim那头牛,可以显示之前的历史记录,以及搞笑的段子。
插件介绍:Plug ’ vim-scripts/taglist.vim’
这个用于生成类似于sorce insight中类似的tag标签,用于显示当前文件中有哪些函数,有哪些结构体等,还涉及自动补全功能,需要进一步研究。
vim的新功能:tag之在文件内完成编译操作
重要学习网站,这篇网站让我开悟了,真牛逼。
#首先,进入工程设置使用的tags
:set tags= tags
#然后设置makeprg或者使用调用外部程序的方法
(第一种可以使用快捷键:cn, cp,cw实现互动,第二种不行但用起来方便)
使用makeprg的方法,以preload程序为例
:set makeprg=gcc\ -fPIC\ -shared\ func_list.c\ codesys_func.c\ cpu.c\ -o\ preload.so
#注意如果编译命令中有空格,需要使用’\‘对空格进行转义,上面的例子就使用了’\‘转义空格。
:make
然后就可以使用互动的命令了
:cc 显示详细错误信息 ( :help :cc )
:cp 跳到上一个错误 ( :help :cp )
:cn 跳到下一个错误 ( :help :cn )
:cl 列出所有错误 ( :help :cl )
:cw 如果有错误列表,则打开quickfix窗口 ( :help :cw )
:col 到前一个旧的错误列表 ( :help :col )
:cnew 到后一个较新的错误列表 ( :help :cnew )
第二种方法:
:!make
这种方法是用于不想退出vim,把想跑的命令结果输出在vimbuffer中
这种虽然能编译,但是不能像上面的一样可以互动了,如果有多个编译错误,不如上面的方便。
tag标签跳转
可能一些工具就是利用这个tag生成了一堆标签,大部分都用不到,导致工程臃肿,vim反应也慢了。
:tag {ident} "跳转到指定的标签
:tags "显示标签栈
CTRL-] "跳转到当前光标下的标签
CTRL-T "跳到标签栈中较早的标签
这个网站推荐了几个实用插件:https://blog.youkuaiyun.com/weixin_63268005/article/details/135326652,还没实验
插件介绍:智能补全操作 ’ neoclide/coc.nvim’
安装新的插件:
Coc.nvim 是一个基于NodeJS 的适用于Vim8, Neovim 的Vim 智能补全插件。Coc本身是Vim的插件,但他有自己的子插件系统。
需要先安装NodeJS,不推荐在apt安装。参考这篇博客,我决定先安装nvm。
先安装NVM(Node Version Manager)
参考网站。
wget -O- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
使用vim修改/.bashrc和/.profile,在文件末尾增加:
export NVM_DIR=“
H
O
M
E
/
.
n
v
m
"
[
−
s
"
HOME/.nvm" [ -s "
HOME/.nvm"[−s"NVM_DIR/nvm.sh” ] && . “KaTeX parse error: Expected 'EOF', got '#' at position 18: …M_DIR/nvm.sh" #̲ This loads nvm…NVM_DIR/bash_completion” ] && . “$NVM_DIR/bash_completion” # This loads nvm bash_completion
刷新配置文件,使配置生效:
source ~/.bashrc
source ~/.profile
最后通过nvm list查看版本测试NVM是否安装成功。
去 nodejs 官网 https://nodejs.org 看最新的版本号,选LTS那个版本。
nvm install v20.11.1
然后安装插件:
Plug ‘neoclide/coc.nvim’, {‘branch’: ‘release’}
nvim打开init.vim,可能需要用下面命令
:CocInfo 测试是否安装成功用。
:CocInstall coc-clangd 安装 C/C++/Objective-C 扩展
:CocUnInstall coc-clangd 卸载 C/C++/Objective-C 扩展
:CocList extensions 看安装了哪些插件
然后通过下面的命令添加yarn(yarn功能不清楚还)
curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
然后学学cocnvim都需要哪些插件,怎么使用。
COC的详细介绍在这:
https://github.com/neoclide/coc.nvim
输入 :checkhealth 查看还有哪些与coc有关的插件没安装
在寻找如何配置coc的过程中,我发现我解决不了,逐渐对配置这个失去了兴趣,想想下次再新的系统上配置又是一个痛苦的过程,干脆用现成的尼玛不好吗?花时间折腾这个干毛,然后开始探索使用LunarVim。
LunarVim探索过程
https://www.mintimate.cn/2023/01/10/guideForLunarvim/
我的新服务器以及旧服务器都弄成这个,简单,不想再他妈搞了。毫无成就感。
LunarVim的安装过程中,我注意到官方脚本可能与nvim的版本有关系。
然后我就又找到一篇文章:https://sspai.com/post/83898
他安装的是针对nvim0.9的,然后我看到他说字体是关键,但是我没搞明白到底要在Windows还是Linux中安装字体,然后我尝试在Windows中安装,发现无果,还需要搜搜。
LV_BRANCH=‘release-1.3/neovim-0.9’ bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.3/neovim-0.9/utils/installer/install.sh)
参考这个使字体能显示出来
https://developer.aliyun.com/article/1372145
lvim配置LSP:
要想让lvim像IDE一样,就势必需要配置LSP,
参考链接:
https://martinlwx.github.io/zh-cn/config-neovim-from-scratch/#lsp
lunarvim使用及配置参考连接
https://www.lunarvim.org/zh-Hans/docs/beginners-guide/keybinds-overview
lunarvimvim如何阅读内核源码
https://blog.youkuaiyun.com/Roger_Spencer/article/details/135325340
我发现还是好麻烦,我大脑有点信息过载,好晕。
最后终于找到一个lvim配合cscope的博客,也算有所收获:
https://blog.youkuaiyun.com/weixin_44420689/article/details/130559298
这个cscope真的牛,我之前都没用过卧槽,
先得cscope -Rbkq得到cscope文件。
ctags -R . 生成的也可以结合着用。
设置字体:
参照官网方法,很简单:
https://github.com/getnf/getnf
尝试按照官网的方法安装字体,但是发现没起作用。暂停这个项目。能用jiu行了。
安装系统剪切板:
sudo apt install xclip
使用lvim的过程中我发现我经常出现系统剪切板不能用的问题,后来通过重启xmoba解决。然后我发现每次我开始工作都需要重新进入相同的目录,昨天的开发页面都关了,怎么办,开始研究TMUX:
tmux 安装及使用方法
tmux安装
包管理器可以完成安装简单,此时版本为3.0,可以。
首先安装tmux插件(参考https://github.com/tmux-plugins/tpm):
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
然后在这个路径下创建tmux的配置文件。
vim ~/.tmux.conf
然后放入如下内容:
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'github_username/plugin_name#branch'
# set -g @plugin 'git@github.com:user/plugin'
# set -g @plugin 'git@bitbucket.com:user/plugin'
# bar set
set -g default-shell /bin/bash # 这里是修改默认的shell
# set -g mouse on # 在tmux中可以用鼠标点点点
# set -g pane-border-style fg='#742727',bg=black # 设置边界颜色(bg背景颜色, fg为线条颜色)
# set -g pane-active-border-style fg=red,bg=black # 设置正在使用的窗口的边界颜色,在不同窗口切换时边界颜色会变化
set -g status-style bg='#0C8A92',fg=black # 底部命令或者状态栏的颜色
# no plugin options
set -g default-terminal 'tmux-256color' #设置终端颜色
set -g base-index
set -g pane-base-index #让第一个window为1
set -g renumber-wimdows on
#key maps
unbind C-b
set -g prefix 'C-s'
bind -n M-Space next-layout
bind -n M-v copy-mode
# System keyboard
# tmux粘贴板中的内容复制到系统粘贴板中
bind C-c run " tmux save-buffer - | xclip -i -sel clipboard"
# 系统粘贴板中的内容复制到tmux终端的粘贴板中
bind C-v run " tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
然后退出vim,执行如下命令生效
tmux source ~/.tmux.conf
插件安装快捷键:Ctrl B + 大写I
插件卸载快捷键:先注释掉对应插件,Ctrl B + alt + u
然后我安装了个主题,瞎了。
tmux的使用
Ctrl + b d 分离会话
大窗口
PREFIX + C用于新建window
PREFIX + 数字,在不通window之间跳转。
PREFIX + P,右边的窗口
PREFIX + N,左边的窗口
Ctrl + d , 关闭大窗口(或PREFIX + X)
创建小窗口
PREFIX + %,创建一左一右的分屏。
PREFIX + “,创建一上一下的分屏。
可通过PREFIX + 上下左右方向键切换(或PREFIX + q选择)
PREFIX + Z 最大化或最小化其中一个小窗口
PREFIX + X 关闭其中一个小窗口
PREFIX + w 查看所有的窗口
PREFIX + 空格, 自动切换布局。
tmux中复制:
Step1. 按住shift,鼠标左键选择内容
Step2. Ctrl + Shift+C复制
Step3. Ctrl+V
在lvim中,鼠标选择,或者用vim键位选择,用y复制,用shift + insert粘贴。
剪切板问题
这个问题困扰我许久,探索过程也是很辛苦,最近发生问题少多了。发现了两篇讲解共享剪切板原理的文章:
https://harttle.land/2017/06/23/vim-tmux-clipboard.html
https://zhuanlan.zhihu.com/p/579860830?utm_psn=1830380654824669184
怎么配置目录与文件显示不同颜色
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
export PATH="$PATH:/home/nxg01742/.local/bin"
. "$HOME/.cargo/env"
if [ "$TERM" == "xterm" ]; then
export TERM=xterm-256color
fi
alias ls='ls --color=auto'
首先更改~/.bashrc如上面所示,其实是最后一行起的作用,然后source ~/.bashrc。
一些非常好用的小命令
lvim -d <file.a> <file.b> 对比两个文件,高亮差异,比meld还好用
lvim打开一个文件后,Ctrl + k 能显示函数用法,几乎都不用查man手册啦。
在目录中按下m可用为该目录添加书签,方便代码寻找,再按下m移除书签。
Lvim中的tab键位设置8个空格,如何调整为跳格键?
因为我发现不同工程的缩进不一样,有的是4个空格,有的是跳格键。而我使用自己的nvim编辑,默认改成了8个空格,不符合原代码风格。需要修改。我需要知道如何修改配置。
使用配置文件 ~/.config/lvim/config.lua 来配置LunarVim。
原本设置如下:
vim.opt.shiftwidth = 8 -- the number of spaces inserted for each indentation
vim.opt.tabstop = 8 -- insert 8 spaces for a tab
vim.opt.numberwidth = 8 -- set number column width to 8 {default 4}
修改增加如下代码:
-- 希望按下 Tab 键时插入一个实际的制表符而不是空格
vim.opt.expandtab = false
然后重新进入lvim,就生效了