delphi中richedit控件光标在最后一个字符的末尾_记一个VS Code终端显示问题的较完美解决

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:53   1404   0

问题表现

在Windows 10上的Visual Studio Code中,通过Ctrl+`第一次启动嵌入式终端时,会

  • 在输入命令的第一个提示符前面蹦出大量空白,且第一个提示符一开始显示不出来
  • 系统预装的两个控制台cmd跟PowerShell 5.1均有此问题,额外加装的PowerShell Core也一样。
  • 在开始输入命令之后,第一个提示符才会显示出来。

后面输入、执行命令都是正常的,在VS Code之外使用各种控制台也无任何问题,但又不想抛弃嵌入式终端,就不得不强忍这种诡异的显示错误。

b23f036c60aad6ccc3ffdd4b04fa6822.png
光标左侧本应是输入命令的提示,且跟上面的版权信息相隔了一大截

3c4d438274e7930203ddb5ab7465c096.png
开始输入之后,提示符才显现

系统和软件环境

01710ecd491cc5538ab76d36c02c420b.png
系统信息,是Win10 LTSC 2019版

702cbacda6c1d98f42ec537341a47f09.png
VS Code信息,基本就是最新版

问题分析与解决方案

首先,这个bug并不普遍。横向来看,本人另一台装有最新专业版Win10 1903的笔记本,同样使用VS Code没有任何问题。纵向来看,这台电脑俩月前在运行Win7时也无任何问题。考虑到该电脑是旧款硬件强上的Win10,显卡驱动适配并不好,软硬件不协调导致小的渲染bug还蛮有可能。

经某度相关问题,发现在Win10 1809系统上,这种问题最容易出现,很可能是系统控制台的问题,而我的LTSC 2019正是1809的核心。最容易查到的方案是“使用旧版控制台”,

d91fcf2d4ee071d59127ac520be8067c.png
使用旧版控制台可解决上述问题,但有自断双臂之意

勾选之后问题解决!但旧版控制台对所有终端程序,包括WSL也生效,导致诸如颜色渲染、Ctrl+V粘贴、矢量字体等很多功能无法使用,有些得不偿失。但本人另外尝试的各种方法,包括调整VS Code对终端的渲染设置,禁用VS Code的GPU加速等等都无法解决问题。这就让我陷入了非常纠结的境地。

最终的思路来到了控制台启动时的版权信息那里。由于大片的空白是在打印版权信息之后,在给第一个命令提示符之前出现的,有一点把换行渲染成换页的味道。如果能让终端启动时跳过版权信息的打印,没准就能解决问题?这一点能做到吗?

随便打开一个控制台,输入powershell -?,就能看到PowerShell最基本的帮助信息啦(PowerShell Core同理,只不过程序名是pwsh

23d1959f5e9d4ddeb47d2931e768f8c8.png

只要我们能让VS Code在启动终端时加入这个参数,就能跳过版权信息的打印!如何实现呢?当然是翻看VS Code的设置

e70ce358b74be05a63afa2b7ce663c8a.png

在UI下,这项设置指出可以为启动终端添加命令行参数,不过它没有提供直接的添加界面,只能手动向json文件中添加。先把鼠标悬停在该设置项左侧,点击出现的齿轮图标,选择“将设置复制为JSON文本”,

9a06e708e10b5d8aebb0242d4bbf0fc2.png

然后点击下面的“在settings.json中编辑”,进入文本形式的设置文件中,

db5d1d97ab789dc4825f5ca724809b58.png

在这里我们可能会看到或多或少的设置项,它们是对默认设置的覆盖。我们要添加的设置,就是上面方框中的内容,我这里是添加好的效果。完成后,终端启动效果如下,

2b13ec8dac24104a60f7cde0110327c5.png

问题解决!跳过版权信息之后大片的空白随之不见,第一个提示符也能正常显示了,也不用向旧版控制台妥协了!

不了解json文件的,如果也要添加这个参数,请随便找到一行末尾,回车添加一个新行,按Ctrl+V把刚刚复制的设置项文本粘进去,
"terminal.integrated.shellArgs.windows": [],
注意如果你是添加在末尾,需要在前一个设置项末尾加个逗号,否则格式不正确;如果是在中间某行,就在它自己末尾加个逗号。然后在方括号中,添加刚刚的参数 "-NoLogo",注意要加上双引号,成为下面这样
"terminal.integrated.shellArgs.windows": ["-NoLogo"]
按Ctrl+S保存,然后关闭这个文件。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP