当前位置: 首页 > news >正文

NEOVIM学习笔记

GitHub - blogercn/nvim-config: A pretty epic NeoVim setup

一直使用vim,每次到了新公司都要配置半天,而且常常配置失败,很多插件过期不好用。偶然看到别人的NEO VIM,就试着用了一下,感觉还不错。

用来开发和阅读C++代码都十分方便。打开文件夹会自动使用lsp创建索引,可以在函数间填转,写代码也会给提示。

picker安装好,命令行执行nvim +PackerInstall回车直接配置插件。

如果提示没有装lua,就apt-get或者brew安装picker

1.在函数和变量间填转使用 CTRL+】,返回使用CTRL+t或者CTRL+O

2 在分屏窗口填转,使用CTRL+ww

3。写代码提示选择使用CTRL+n

4.C-^可以打开的文件间跳转,:bn 和 :bp可以分别跳转上一个文件和下一个文件

5   使用 - 键或者h跳转到上一级目录。

7 复制到系统剪切板,这是三个按键(双点加号y,双点加号输入时要按shift)  "+y
 

文档代码快速整理技巧,现在很多网站代码可能是抓取的,搞过来惨不忍睹,排版,换行,括号皱成一团,没有vim的快速整理技巧,往往需要花费更多的时间调整,没有任何编辑器在整理文章条理,结构和代码能超过vim:

1.获取文件特别是中文档会有很多编码问题而显示不对,统一使用utf8编友。查看文档编码并设置文件上应编码utf8
获取编码
set fileencoding
设置编码及语言
set encoding=utf-8
set langmenu=zh_CN.UTF-8
让vim自动识别文件编码(可以自动识别UTF-8或 者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适 的编码,就用latin-1(ASCII)编码打开。
set encoding=utf-8 fileencodings=utf-8
2.以指定的编码打开某文件
如打开windows中以ANSI保存的文件
vim file.txt -c "e ++enc=GB18030"
在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8
3.查看文件格式是win还是linux,换行符不同,服务器以linux和unix为主,减少中间环节,改为unix
:set fileformat?
设置文件格式为 unix
:set fileformat=unix
4.偶尔修改一下十六进制和库和应用程序,Vim下以16进制查看, 修改文本
vim -b filename
在命令行模式下, 输入以下命令:
:%!xxd
修改完成以后,同样在命令行模式下使用以下命令可以返回正常的格式:
:%!xxd -r
注意,只有左侧16进制被修改的部分会生效,对于右侧字符的修改不会产生效果。


5.设置显示行号
set number
6.存入数据时,一些无用的不可见字符会影响存储和解析,设置显示不可见字符,然后去掉
set invlist
7自己定义不可见字符的显示方式
set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
set list
4.有些情况下单行显示更清晰,更容易把握文件之结构,设置单行,取消单行
直接在vi的命令模式中输入:
set wrap
如果想取消,就输入:
set nowrap
5.我会把文件内容转为数组,现使用程序写入数据库,删除空格行会找数组更紧凑
非编辑状态下输入:g/^$/d

6.删除行首空格,这个用于对齐:
非编辑状态下输入:%s/^\s*//g

7.删除行尾空格:
非编辑状态下输入:%s/\s*$//g

8.排序
:sort
9合并两行
普通模式下,按 J (大写),助词符是(Join)。会把下一行合并(join)到当前行上来
使用vim编辑:将文本复制进来
先合并两行数据
:g/^/j
10缩进
全部格式化 : gg=G
对当前行格式化(缩进): ==
对以下多行格式化(倍数操作): [count] ==
选择多行后, 执行 等号命令 =
11shift+v 转到可视模式
shift+g 全选
12.ddp 光标所在行跟下面一行进行交换
xp 光标所在的字符后面一个字符进行交换
13在每行行首或行尾添加/删除内容
添加
在每行行首添加相同的内容:


:%s/^/要添加的内容



每行行尾添加相同的内容:


:%s/$/要添加的内容

利用正则表达式删除代码段每行的行号
:%s/^\s*[0-9]*\s*//gc

其中,^表示行首,$表示行尾,\s表示空格,[0-9]表示0~9的数字,*表示0或多个,%s/^\s*[0-9]*\s*//gc的意思是将每行以0或多个空格开始中间包含0或多个数字并以0或多个空格结束的字符串替换为空。

14重复上次普通命令
. 只有一个点

@: 重复上次ex命令。
@@ 重复执行。
15代码块左移,右移
 <<
>>
16删除空行

:g/^\s*$/d

简单解释一下:
g :全区命令
/ :分隔符
^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行

    1.  替换当前行中的内容:    :s/from/to/    (s即substitude)
        :s/from/to/     :  将当前行中的第一个from,替换成to。如果当前行含有多个
                            from,则只会替换其中的第一个。
        :s/from/to/g    :  将当前行中的所有from都替换成to。
        :s/from/to/gc   :  将当前行中的所有from都替换成to,但是每一次替换之前都
                            会询问请求用户确认此操作。

        注意:这里的from和to都可以是任何字符串,其中from还可以是正则表达式。

    2.  替换某一行的内容:      :33s/from/to/g
        :.s/from/to/g   :  在当前行进行替换操作。
        :33s/from/to/g  :  在第33行进行替换操作。
        :$s/from/to/g   :  在最后一行进行替换操作。

    3.  替换某些行的内容:      :10,20s/from/to/g
        :10,20s/from/to/g   :  对第10行到第20行的内容进行替换。
        :1,$s/from/to/g     :  对第一行到最后一行的内容进行替换(即全部文本)。
        :1,.s/from/to/g     :  对第一行到当前行的内容进行替换。
        :.,$s/from/to/g     :  对当前行到最后一行的内容进行替换。
        :'a,'bs/from/to/g   :  对标记a和b之间的行(含a和b所在的行)进行替换。
                                其中a和b是之前用m命令所做的标记。

    4.  替换所有行的内容:      :%s/from/to/g
        :%s/from/to/g   :  对所有行的内容进行替换。

    5.  替换命令的完整形式:    :[range]s/from/to/[flags]
        5.1 s/from/to/
            把from指定的字符串替换成to指定的字符串,from可以是正则表达式。
        5.2 [range]
            有以下一些表示方法:
            不写range   :  默认为光标所在的行。
            .           :  光标所在的行。
            1           :  第一行。
            $           :  最后一行。
            33          :  第33行。
            'a          :  标记a所在的行(之前要使用ma做过标记)。
            .+1         :  当前光标所在行的下面一行。
            $-1         :  倒数第二行。(这里说明我们可以对某一行加减某个数值来
                            取得相对的行)。
            22,33       :  第22~33行。
            1,$         :  第1行 到 最后一行。
            1,.         :  第1行 到 当前行。
            .,$         :  当前行 到 最后一行。
            'a,'b       :  标记a所在的行 到 标记b所在的行。

            %           :  所有行(与 1,$ 等价)。

            ?chapter?   :  从当前位置向上搜索,找到的第一个chapter所在的行。(
                            其中chapter可以是任何字符串或者正则表达式。
            /chapter/   :  从当前位置向下搜索,找到的第一个chapter所在的行。(
                            其中chapter可以是任何字符串或者正则表达式。

            注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏
            移量。

        5.3 [flags]
            这里可用的flags有:

            无      :  只对指定范围内的第一个匹配项进行替换。
            g       :  对指定范围内的所有匹配项进行替换。
            c       :  在替换前请求用户确认。
            e       :  忽略执行过程中的错误。

            注意:上面的所有flags都可以组合起来使用,比如 gc 表示对指定范围内的
            所有匹配项进行替换,并且在每一次替换之前都会请用户确认。

跳转,区分大小写,加shift的是大写:
1,上下左右箭头 hkjl上下左右移一个字符退格,左移一字符空格,右移一个字符
2.Ctrl-f往下滚动一屏Ctrl-b往上滚动一屏
3.Ctrl-U往上滚动半屏Ctrl-D往下滚动半屏
4.Shift+h顶部第一行字符起始,也即大写HShift+m中间shift+l底部最后一行起始
5.^,0当前行起始$,当前行尾
6.~光标上一行首Enter下一行首
7.[n]G。指定行,500G,到500行gg 跳到文章开头shift+g 跳到文章末尾
8.Ctrl-E内容整体上移一行Ctrl-Y内容整体下移一行
9.(){} 完整句子句首,完整句子句尾,完整段落首位置,完整段落尾位置
插入,记下a,i,使用跳转也行:
a,光标之后插数据
A,光标行尾插数据(即shift+a)
i,光标之前插数据
I, 光标行首插数据(即shift+I)
o.所在行之后
O,所在行之前(即shift+o)修改替换,记了C或者R,其他也能使用跳转
shift+c 替换从光标开始的字符
cw 替换单字
[n]cc 替换行,n行,n>=1
[n]s
shift+s
r替换一个
R替换多个
~转换大小写
撤消
u撤消先前执行的
U撤消全部
删除,记个x,不停的按就行了
[n]x删除当前单个字符
[n]X删除前一个字符
dw
[n]dd 删除N行
D删除行尾
复制删除粘贴
yy,Y复制
p光标行下
shift+P光标行上面
EX命令,上面的大都是快捷键,下面的大都是命令。
多行复制:
:line#1, line#2 co line#3 从某行#1开始到某行#2结束内容复制到某行#3之后
.当前行,$文件结尾
移动:
:line#1, line#2 m line#3 从某行#1开始到某行#2结束内容复制到某行#3之后
删除:
:line#1, line#2 d
查找:
:str 正向查找
:?str 反向查找
n 或者 /从当前位置开始检索下一个,相当于F3
shift+n 或者 ?从当前位置开始反向检索下一个,相当于shift+F3
:/pat/+n 光标移到pat所在行之后第n行
:/pat?+n 光标移到pat所在行之前第n行
模式检索:
:/^search 只检索行首位置
:/serch$ 只检索行尾
:/\<search\> 
支持通配符.*,[a-z],[dm]
替换字符串:
:[g]/search-staring/s//replace-string/[g][c]
如:g/BankA/s//BankB/g
如果需要手动确认,加个C:
g/BankA/s//BankB/gc
编辑多个文件:
vim file1 file2
合并文件:
:line# r filename 把读取的文件插入当前光标位置
删除特殊字符:
1,$ s/^M//
VIM里运行shell命令:
:!command
!!command
:sh
如:!adb devices
!!adb devices保存文件退出
:w  写入不退出
:w! 强制写入
:wq  写入退出
:wq! 写入强制退出
ZZ 写入退出,使用shift+两次ZZ
:q  退出
:q! 强制退出
vim开发anroidvim支持运行外部命令和shell,托android的福,借助anroidsdk提供的开发套件,我们通过vim的强大扩展和支持,可以很轻松的使用vim开发android应用,虽然没eclipse能使用直观的鼠标操作,但在一些老爷机上,借助命令和vim,仍然可以快捷的andorid应用开发,还是不错的,而且如果机器还没有来得及安装ide,也能做一些开发。
1.生成android工程android  create project -n test –activity demo –packagecn.forwind.myproject –target 3 –path ./myproject

android create project -n Welcome_World -t 8 -p Welcome_World -k org.example.welcome_World  -a Welcome_World

  其中,-n指定要创建的项目的名称,-t指定项目针对的Android的平台,-p指定该项目的保存路径,-k指定该项目的包名,-a选项指定Activity的名称。

2.创建配置文件Project Create./myproject -n java3.创建模拟器Android create avd -n forwind.cn
4打开vim,执行命令:ProjectList
命令,确认一下,myproject这个project是被认出来了的。好,我们现在试着运行:ProjectTreemyproject
5. 运用vim 技巧修改完成了,就可以编绎了,如果工程同样使用了NDK 技术,需要先进入jni 目录执行一下 ndk-build 来生成so 文件,如果出错了,可以使用 ndk-build NDK_LOG=1 来查看出错的提示并修改。
6。如没有NDK技术,可以直接使用如下命令创建build.xml文件,android update project --target 3 -p . -s7。然后使用如下命令生成apk应用antdebug或者antrelease
clean: 清除项目生成的内容一一也就是恢复原来的样子。debug: 打包一个调试用的 Android 应用的 APK包,使用 debug key 进行签名release:打包一个发布用的 Android 应用的 APK 包。test: 运行测试。要求该项目必须是一个测试项目。install:将生成的调试用的 APK 包安装到模拟器上。uninstall:从模拟器上卸载该应用程序。8. 可以启动模拟器, 然后使用adbpush 或者adbinstall 来安装这个应用
emulator-avn AVD_NAME

参考:
 我的现代化 NeoVim 配置介绍/教程 - 知乎

VIM技巧及使用vim开发android应用_nvim写android_残诗的博客-CSDN博客

相关文章:

NEOVIM学习笔记

GitHub - blogercn/nvim-config: A pretty epic NeoVim setup 一直使用vim&#xff0c;每次到了新公司都要配置半天&#xff0c;而且常常配置失败&#xff0c;很多插件过期不好用。偶然看到别人的NEO VIM&#xff0c;就试着用了一下&#xff0c;感觉还不错。 用来开发和阅读C代…...

Docker三剑客之docker-compose

docker-compose 是 Docker 生态系统中的一个重要成员&#xff0c;它允许开发人员使用一个简单的配置文件来定义和运行多个 Docker 容器。通过 docker-compose&#xff0c;你可以定义应用程序的各个组件、容器之间的依赖关系以及网络配置&#xff0c;从而实现在一个命令中启动、…...

单调队列

目录 一&#xff0c;单调队列 二&#xff0c;模板实现 三&#xff0c;OJ实战 剑指 Offer 59 - I. 滑动窗口的最大值 一&#xff0c;单调队列 单调队列是双端队列的拓展&#xff0c;支持尾部插入&#xff0c;双端删除&#xff0c;其中的数据始终维持单调性&#xff0c;从而…...

effective c++ 笔记

TODO&#xff1a;还没看太懂的篇章 item25 item35 模板相关内容 文章目录 基础视C为一个语言联邦以const, enum, inline替换#define尽可能使用constconst成员函数 确定对象使用前已被初始化 构造、析构和赋值内含引用或常量成员的类的赋值操作需要自己重写不想使用自动生成的函…...

【送书活动】深入浅出SSD:固态存储核心技术、原理与实战

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

GaussDB数据库SQL系列-行列转换

一、前言 二、简述 1、行转列概念 2、列转行概念 三、GaussDB数据库的行列转行实验示例 1、行转列示例 1&#xff09;创建实验表&#xff08;行存表&#xff09; 2&#xff09;静态行转列 3&#xff09;行转列&#xff08;结果值&#xff1a;拼接式&#xff09; 4&…...

美国陆军网络司令部利用人工智能增强网络攻防和作战决策能力

源自&#xff1a; 奇安网情局 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨&#xff0c;并不意味着支持其观点或证实其内容的真实性。版权归原作者所有&#xff0c;如转载稿涉及版权等问题&#xff0c;请立即联系我们删除。 “人工智能技术与咨询…...

Notion团队协作魔法:如何玩转数字工作空间?

Notion简介 Notion已经成为现代团队协作的首选工具之一。它不仅仅是一个笔记应用&#xff0c;更是一个强大的团队协作平台&#xff0c;能够满足多种工作场景的需求。 Notion的核心功能 Notion提供了丰富的功能&#xff0c;如文档、数据库、看板、日历等&#xff0c;满足团队的…...

视频云存储/安防监控/AI视频智能分析平台新功能:人员倒地检测详解

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍&#xff0c;支持口罩佩戴检测…...

解决RabbitMQ报错Stats in management UI are disabled on this node

文章目录 问题描述&#xff1a;解决步骤&#xff1a;进入容器后&#xff0c;cd到以下路径修改 management_agent.disable_metrics_collector false退出容器重启rabbitmq容器 问题描述&#xff1a; linux 部署 rabbitmq后&#xff0c;打开rabbitmq管理界面。点击channels&#…...

【重点】【NAND】聊聊固态硬盘SSD的寿命及其影响因素

固态硬盘是由主控芯片、存储颗粒芯片组成的闪存设备&#xff0c;固体硬盘的英文简称是SSD&#xff0c;如果是移动用的固态硬盘&#xff0c;则其英文简称为PSSD。 固态硬盘SSD分工业级和消费级等&#xff0c;目前&#xff0c;工业级固态硬盘SSD通常采用MLC闪存&#xff0c;而消…...

数据库约束

文章目录 1. 简介2. 代码演示3. 外键约束4. 外键删除和更新行为 1. 简介 概念&#xff1a;约束时作用于表中子段上的规则&#xff0c;用于限制存储在表中的shuju目的&#xff1a;保证数据库中数据的正确、有效性和完整性分类&#xff1a; 约束描述关键字非空约束限制该字段不…...

Unity实现MQTT服务器

首先下载MqttNet&#xff1a;MqttNet下载地址 解压好后使用vs打开&#xff0c;并生成.dll文件&#xff08;我这里下载的是4.1.2.350版本&#xff09; 然后再/Source/MQTTnet/bin/Debug/net452 文件夹中找到生成的文件 新建unity工程&#xff0c;创建Plugins文件夹&#xff0…...

Linux(centos) 下 Mysql 环境安装

linux 下进行环境安装相对比较简单&#xff0c;可还是会遇到各种奇奇怪怪的问题&#xff0c;我们来梳理一波 安装 mysql 我们会用到下地址&#xff1a; Mysql 官方文档的地址&#xff0c;可以参考&#xff0c;不要全部使用 https://dev.mysql.com/doc/refman/8.0/en/linux-i…...

决策树(Decision Tree)

决策树的定义: 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点&#xff08;node&#xff09;和有向边&#xff08;directed edge&#xff09;组成。结点有两种类型: 内部结点&#xff08;internal node&#xff09;和叶结点&#xff08;leaf node&#xff0…...

解决 PaddleClas 下载预训练模型报错 ModuleNotFoundError No module named ‘ppcls‘ 的问题

当我们在使用 PaddleClas 进行预训练模型下载时&#xff0c;可能会遇到一个报错&#xff0c;报错信息为 ModuleNotFoundError: No module named ppcls。这个错误通常是因为 Python 解释器无法找到名为 ppcls 的模块&#xff0c;而我们的代码中正尝试导入它。让我们一起来解决这…...

视觉化洞察:为什么我们需要数据可视化?

为什么我们需要数据可视化&#xff1f;这个问题在信息时代变得愈发重要。数据&#xff0c;如今已成为生活的一部分&#xff0c;我们每天都在产生大量的数据&#xff0c;从社交媒体到购物记录&#xff0c;从健康数据到工作表现&#xff0c;数据无处不在。然而&#xff0c;数据本…...

C语言函数概述——拜佛代码

函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用函数作用演示代码&#xff1a; #include <stdio.h>// 定义函数 void func() {print…...

防火墙日志分析工具

防火墙提供对进入组织网络的网络流量的来源和类型的可见性&#xff0c;这使得防火墙日志成为重要的信息源&#xff0c;包括所有连接的源地址、目标地址、协议和端口号等详细信息&#xff0c;此信息可以提供对未知安全威胁的见解&#xff0c;是威胁管理中的重要工具。 防火墙日…...

Autofac中多个类继承同一个接口,如何注入?与抽象工厂模式相结合

多个类继承同一个接口,如何注入&#xff1f;与抽象工厂模式相结合 需求: 原来是抽象工厂模式,多个类继承同一个接口。 现在需要使用Autofac进行选择性注入。 Autofac默认常识: Autofac中多个类继承同一个接口,默认是最后一个接口注入的类。 解决方案&#xff1a;(约定大于配…...

Django系列之日志配置

如何配置 settings.py 文件中增加如下日志模块 """logger 配置""" LOGGING {version: 1,disable_existing_loggers: False, # 是否去掉目前项目中其他地方中以及使用的日志功能&#xff0c;但是将来我们可能会引入第三方的模块&#xff0c;里…...

四轴飞行器传感器(SimulinkMatlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

学习 使用pandas库 DataFrame 使用

1 、 数据排序 sort_values()函数 by:要排序的名称或名称列表&#xff0c; sorted_df df.sort_values(byAge,ascendingFalse) 由大到小排序&#xff1b; sorted_df df.sort_values(byAge) 由小到大排序&#xff1b; # 创建一个示例数据帧 data {Name: [Tom, Nick, John…...

C++字符串详解

C 大大增强了对字符串的支持&#xff0c;除了可以使用C风格的字符串&#xff0c;还可以使用内置的 string 类。string 类处理起字符串来会方便很多&#xff0c;完全可以代替C语言中的字符数组或字符串指针。 string 是 C 中常用的一个类&#xff0c;它非常重要&#xff0c;我们…...

vant2 van-calendar组件增加清除按钮和确定按钮

利用自定义插槽增加一个清除按钮 <van-calendar ref"fTime1" select"selectTimePicker" confirm"changeTimePicker" :default-date"null" :show-confirm"false" v-model"timePickerShow" type"range&quo…...

Spring redis使用报错Read timed out排查解决

文章目录 使用场景报错信息解决方式 使用场景 我们使用redis作为缓存服务&#xff0c;缓存一些业务数据&#xff0c;如路口点位信息、渠化信息、设备信息等有一些需要实时计算的数据&#xff0c;缓存在redis里&#xff0c;如实时信号周期相位、周期内过车数量等有需要不同服务…...

C语言每日一练-------Day(9)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;字符个数统计 多数元素 投票法 &#x1f493;博主csdn个人主页&#xf…...

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…...

二叉查找树(binary search tree)(难度7)

C数据结构与算法实现&#xff08;目录&#xff09; 答案在此&#xff1a;二叉查找树&#xff08;binary search tree&#xff09;&#xff08;答案&#xff09; 写在前面 部分内容参《算法导论》 基本接口实现 1 删除 删除值为value的第一个节点 删除叶子节点1 删除叶子节…...

windows环境装MailHog

背景&#xff1a;win10系统&#xff0c;windows 宝塔&#xff0c;laravel 项目&#xff0c;邮件相关需要装一个MailHog 下载地址&#xff1a;https://sourceforge.net/projects/mailhog.mirror/ 直接下载&#xff0c;下载后双击运行就可以了&#xff0c;系统可能提示”不信任“…...