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

Visual Studio Code中对打开的脚本格式统一

什么是Language Server Protocol (LSP)?

 Language Server Protocol(语言服务器协议,简称LSP)是微软在2016年提出的一套统一的通讯协议方案。LSP定义了一套编辑器或者IDE语言服务器(Language Server)之间使用的协议,该语言服务器提供自动完成、转到定义、查找所有引用等语言功能。

语言服务器(Language Server):使用在线编辑工具的时候,会有代码提示、代码错误诊断等功能,这个背后实际上有一个对应这个语言的language server进程,这个language server进程实例负责分析你当前打开的代码文件。

市面上的编辑器/IDE,本质上提供给用户的代码编辑(如打开文件,编辑文集,查找引用,打开工作区等)以及编辑器的响应行为(如补全提示、代码诊断等)其实都大同小异,可能在个别功能上实现不一样,但是逃不开上述内容。或者说,上述这些功能都可以抽象为一系列的【行为事件】。

微软提出 LSP 的目的是,之前各个编辑器(VSCode, Vim, Atom, Sublime...)各自为战,编辑器内部实现的特性和协议都不同。每换一个编辑器,就有可能要给该编辑器中支持的每门语言写一个对应的 Language Server,也就是说假设有 n 门语言,m 个编辑器,那全部编辑器适配所有语言的开发成本和复杂度为 n * m。

能不能在中间层做一个抽象,让语言的「静态分析服务」和「编辑器 / IDE」分离开来?这样上述情景下开发成本和复杂度就可以降低为线性的 n + m。

安装VS code的R扩展以提高R编程体验:

这个VS Code扩展提供了R编程语言的支持,包括扩展语法突出显示、基于代码分析的R语言服务、与R终端交互、查看数据、绘图、工作区变量、帮助页面、管理包以及使用RMarkdown文档等功能。

  1. 在你的电脑上安装R(>=3.4.0)。
  2. 在R中安装languageserver扩展包:install.packages("languageserver")
  3. 在VS code中安装R扩展:在VS Code中搜索R,安装R扩展;
  4. 创建一个R文件,并且开始编程;

推荐下面的软件或者扩展来提高在VS Code中使用R的体验:

  • radian: 一个R console,纠正了官方R端的诸多限制,支持语法高亮、自动补全等诸多功能。
  • VSCode-R-Debugger: 一个VS Code扩展,来提高R调试功能;
  • httpgd:一个R包,提供通过HTTP和WebSockets异步提供SVG图形的图形设备。

功能1:设置统一的代码格式(format)

 效果图:

 可以从效果图中看到,m <- lm(y ~ x, weights = w)中,由之前的y~x增加了空格,y空格~空格x,weight空格=空格w.

为什么要设置格式?我认为有以下个方面的原因:

  1. 代码美观,可读性强;
  2. 为了之后,代码比较做准备,因为代码格式统一的时候,代码做比较才会有意义。【代码比较可以在VScode中对选中的两个代码进行比较。】

功能2:符号高亮

当鼠标的光标在一个符号内部的时候,代码文件(例如下面的vscode-R-test1.R)中的所有这个符号都会被高亮。下面这个例子中,光标放在了符号var2内部,我们可以看到这个文件中的所有var2都高亮了,即都有一个阴影框将这个var2框住了。

 功能3:代码框扩展选择(Document selection)

在一个代码段中,如果选中某几行代码,然后同时按住Shift+Alt+rightarrow后,会发现选中了这个代码段,这个很方便,尤其是当我们想要选中的代码段非常长的情况。

首先选中几行代码:

然后按住Shift+Alt+rightarrow,我们就可以选中diagnostics_task这个函数的代码块:

 功能4:代码段(code section)

R语言服务器通知VSCode代码段或代码块,通过outline或者panel header进行导航:

 代码折叠:

 功能5:调用层次结构(Call hierarchy)

选中自定义函数的函数名,右键出现下拉菜单,从中选择show call hierarchy,进而在VS code页面的左侧出现 选中的自定义函数的函数名,它下面现实了 调用这个函数的函数名。

 

效果图如下:

 

参考:

理解 Language Server Protocol 的工作原理 - 掘金 (juejin.cn)

GitHub - REditorSupport/languageserver: An implementation of the Language Server Protocol for R

R Language Service · REditorSupport/vscode-R Wiki · GitHub 

 

相关文章:

Visual Studio Code中对打开的脚本格式统一

什么是Language Server Protocol (LSP)? Language Server Protocol&#xff08;语言服务器协议&#xff0c;简称LSP&#xff09;是微软在2016年提出的一套统一的通讯协议方案。LSP定义了一套编辑器或者IDE与语言服务器&#xff08;Language Server&#xff09;之间使用的协议&…...

补充JDK源码-IDEA集成工具

在阅读JDK8源码的时候发现&#xff0c;只有一小部分常用包是存在源码及其注释的&#xff0c;而很多内部包是没有源码&#xff0c;class文件在阅读的时候对阅读者十分不友好。在网上搜集了很多资料都没有解决问题。 解决问题办法&#xff1a;参考文档。本文主要是根据这篇文章记…...

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path

编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/...

Springboot切面打印日志

切面打印完整日志,以下代码用于扫描RestController 注解修饰的接口,并打印相关日志 import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; impor…...

ubuntu上回环设备/dev/loop0占用100%清理

查看磁盘占用情况时&#xff1a; df -h/dev/loopn这些设备在Linux下被称为回环设备。 终端输入&#xff1a; sudo apt autoremove --purge snapd再次查看&#xff1a;...

List list=new ArrayList()抛出的ArrayIndexOutOfBoundsException异常

1.应用场景&#xff0c;今天生产日志监控到一下ArrayList 进行add 异常&#xff0c;具体日志如下&#xff1a; eptionHandler.handler(178): TXXYBUSSINESS|执行异常 java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bo…...

桶排序算法

桶排序算法 算法思想概述&#xff1a;桶排序的主要步骤如下&#xff1a; 算法goland实现&#xff1a;图解演示&#xff1a; 算法思想概述&#xff1a; 桶排序&#xff08;Bucket Sort&#xff09;是一种非比较性的排序算法&#xff0c;它将待排序的元素分到有限数量的桶&#…...

P8604 [蓝桥杯 2013 国 C] 危险系数

题目背景 抗日战争时期&#xff0c;冀中平原的地道战曾发挥重要作用。 题目描述 地道的多个站点间有通道连接&#xff0c;形成了庞大的网络。但也有隐患&#xff0c;当敌人发现了某个站点后&#xff0c;其它站点间可能因此会失去联系。 我们来定义一个危险系数 DF(x,y)&…...

Excel·VBA表格横向、纵向相互转换

如图&#xff1a;对图中区域 A1:M6 横向表格&#xff0c;转换成区域 A1:C20 纵向表格&#xff0c;即 B:M 列转换成每2列一组按行写入&#xff0c;并删除空行。同理&#xff0c;反向操作就是纵向表格转换成横向表格 目录 横向转纵向实现方法1转换结果 实现方法2转换结果 纵向转横…...

Leetcode-每日一题【剑指 Offer 06. 从尾到头打印链表】

题目 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值&#xff08;用数组返回&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,3,2]输出&#xff1a;[2,3,1] 限制&#xff1a; 0 < 链表长度 < 10000 解题思路 1.题目要求我们从尾到头反过…...

LeetCode--HOT100题(22)

目录 题目描述&#xff1a;160. 相交链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;160. 相交链表&#xff08;简单&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表…...

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…...

Linux systemctl 简单介绍与使用

在Linux下&#xff0c;systemctl是一个管理系统服务的命令。它提供了对systemd服务的控制和管理。 在系统中使用systemctl命令&#xff0c;您可以执行以下操作&#xff1a; 启动服务&#xff1a;systemctl start servicename停止服务&#xff1a;systemctl stop servicename重…...

恺英网络宣布:与华为鸿蒙系统展开合作,将开发多款手游

8月5日消息&#xff0c;恺英网络宣布旗下子公司盛和网络参加了华为开发者大会&#xff08;HDC.Together&#xff09;游戏服务论坛&#xff0c;并在华为鸿蒙生态游戏先锋合作启动仪式上进行了亮相。恺英网络表示&#xff0c;将逐步在HarmonyOS上开发多款游戏&#xff0c;利用Har…...

Vue CORS

使用Vue框架报错&#xff0c;客户端浏览器有CORS错误&#xff0c;怎么解决&#xff1f; 参考API Proxying During Development&#xff0c;可以新增或修改config/index.js下的proxyTable属性。 留意到 proxyTable的key值为/api&#xff0c;代表所有服务端域名都改成以/api开头…...

Godot 4 源码分析 - 文件读入编码处理

今天需要读入xml文件进行处理&#xff0c;结果读入一个带中文的文件时&#xff0c;出错了。当然程序还能运行&#xff0c;但编译器一直报错&#xff0c;而且XML解析也不正确 单步调试发现读入的内容出现乱码&#xff0c;具体逻辑&#xff1a; String FileAccess::get_as_text…...

Linux 中使用 verdaccio 搭建私有npm 服务器

安装 Node Linux中安装Node 安装verdaccio npm i -g verdaccio安装完成 输入verdaccio,出现下面信息代表安装成功&#xff0c;同时输入verdaccio后verdaccio已经处于运行状态&#xff0c;当然这种启动时暂时的&#xff0c;我们需要通过pm2让verdaccio服务常驻 ygiZ2zec61wsg…...

C++入门之stl六大组件--stack和queue源码深度剖析及模拟实现

目录 前言 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的模拟实现 三、priority_queue的介绍和使用 1.priority_queue的介绍 2.priority_queue的使用 3.priority_queue的模…...

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false&#xff0c;那么执行DB01.TB_ORDER时就会报错&#xff0c;必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询&#xff0c;列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…...

Grafana集成prometheus(2.Grafana安装)

查找镜像 docker search grafana下载指定版本 docker pull grafana/grafana:10.0.1启动容器脚本 docker run -d -p 3000:3000 --namegrafana grafana/grafana:10.0.1查看是否启动 docker ps防火墙开启 检查防火墙3000端口是否开启 默认用户及密码 admin/admin 登录 ht…...

DuinoMemory:面向Arduino的轻量级嵌入式智能指针库

1. 项目概述DuinoMemory 是一款专为 Arduino 及资源受限嵌入式系统设计的轻量级智能指针库。它不依赖 STL、不使用异常&#xff08;exceptions&#xff09;、不启用 RTTI&#xff0c;完全以头文件形式提供&#xff08;header-only&#xff09;&#xff0c;所有实现均通过 C 模板…...

ChilloutMix NiPrunedFp32Fix 模型完整教程:从零开始掌握AI图像生成

ChilloutMix NiPrunedFp32Fix 模型完整教程&#xff1a;从零开始掌握AI图像生成 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix ChilloutMix NiPrunedFp32Fix 是一款基于稳定扩散技…...

Health Agent开放平台:企业级健康医疗AI Agent基础设施

在人工智能加速渗透各行各业的今天&#xff0c;健康医疗领域正迎来由智能体驱动的深刻变革。面向专业场景的健康医疗AI Agent&#xff0c;正成为企业提升服务效能、优化运营流程、构建差异化竞争力的核心引擎。而集专业性、灵活性与可扩展性于一体的企业级智能体平台&#xff0…...

Linux 的 id 命令

id 是 Linux 系统中一个常用的命令行工具&#xff0c;用于显示用户和组的身份信息。 基本功能 id 命令可以显示当前用户或指定用户的以下信息&#xff1a; 用户 ID (UID)主组 ID (GID)所属的所有组 (Groups)用户名和组名&#xff08;当与数字 ID 对应时&#xff09; 常用命…...

2026届毕业生推荐的五大AI科研神器实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在运用人工智能辅助写作这个行为当中&#xff0c;所生成的内容常常带有十分明显的机械感。所…...

手把手教你用ESP32-S3开发智能语音设备:麦克风选型+WAV录音全流程

ESP32-S3智能语音设备开发实战&#xff1a;从麦克风选型到WAV录音全流程解析 1. 智能语音设备开发的核心挑战与ESP32-S3解决方案 在智能家居和物联网设备爆发式增长的今天&#xff0c;语音交互已成为人机交互的重要方式。然而&#xff0c;开发一款高性能的智能语音设备并非易…...

Python实战:5分钟搞定Infoway期货行情API接入(附完整代码)

Python实战&#xff1a;5分钟搞定Infoway期货行情API接入&#xff08;附完整代码&#xff09; 最近两年量化交易的热度持续攀升&#xff0c;身边不少程序员朋友都在尝试将自己的编程技能转化为交易优势。作为Python开发者&#xff0c;我们最关心的莫过于如何快速获取可靠的实时…...

终极指南:如何精准选择Fluxion攻击时间窗口与提升成功率的完整策略

终极指南&#xff1a;如何精准选择Fluxion攻击时间窗口与提升成功率的完整策略 【免费下载链接】fluxion Fluxion is a remake of linset by vk496 with enhanced functionality. 项目地址: https://gitcode.com/gh_mirrors/fl/fluxion Fluxion是一款基于linset重构的无…...

Python数据标准化全攻略:从原理到实践

在机器学习和数据分析领域&#xff0c;数据标准化是一项至关重要的预处理步骤。它能够将不同尺度的特征统一到相同的范围内&#xff0c;帮助模型更好地学习数据特征&#xff0c;提高训练效率和模型性能。本文将详细介绍数据标准化的概念、常用方法以及在Python中的实现方式。一…...

116. 为项目监控员生成的警报添加标签

Procedure 程序To label alerts for Project Monitors, you must configure the Prometheus Federator Helm charts values section. This is done by adding additionalRuleLabels under defaultRules within helmProjectOperator. You can perform this modification during…...