你如何获得Vim高亮如Visual Studio C ++的语法错误?(How do you get

2019-07-04 09:45发布

是否有可能得到gVim的突出C ++实时像Visual Studio语法错误(红色波浪线下方)?

Answer 1:

简短的回答:是的,但它不会那么顺利/直接在IDE中。

龙答:尽管有IDE中内置的支持(和解析器等)的(通常是非常有限的)一套编程语言,Vim的是一个通用的编辑器,因此必须依靠外部工具做语法检查。 内置的方式是执行:make和接收(语法或编译器)在quickfix列表错误列表。 有插件自动执行; Syntastic是一个非常流行的一种具有多国语言支持。

但尽管如此,由于Vim的调用外部可执行文件,具有异步运行的任务很少的支持,将会有更多的延迟,直到您看到的错误。 如果你不能没有一个IDE的功能做的,它的罚款,同时使用根据自己的优势:Vim的超高效的文本编辑,代码导航,调试和编译IDE中。



Answer 2:

VIM是好年,我,但我搬到了崇高的文本3,当我意识到这个编辑器是多么有用,它是多么容易扩展这个编辑器更多的功能。

现在,我在崇高的文本编辑,并在同一个应用程序编译。 我做了一个语法高亮显示的更好的方式错误,如果你点击了错误,它把你的地方在错误发生的地方。

按照这些步骤,并在C ++编码会比以前简单多了你。

因此,安装后和sublime_text运行它,一旦你得到一个文件夹~/HOME/.config/sublime-text-3/ 。 如果你不熟悉sublime_text就足够了说,你可以添加你的修改到这个文件夹~/HOME/.config/sublime-text-3/Packages/User 。 让我们把这个文件夹$SUBLIME_CONFIG_DIR从现在开始。 我所要告诉你在这里是如何添加构建系统C ++以及如何语法高亮输出。

设置构建系统

通过添加一个文件名为创建构建系统c++build.sublime-build$SUBLIME_CONFIG_DIR有以下内容:

{
  "shell" : true,
  "cmd": ["make $file_base_name"],
  "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
  "selector": "source.c++",
  "working_dir": "${file_path}",
  "syntax" : "Packages/User/c++output.tmLanguage"
}

我会解释每一行做什么。 1. "shell":true简单的说,如果你调用建立在一个文件崇高应该运行shell命令。 2. cmd被调用构建时将被执行。 您可以使用G ++或其他任何东西,而不是作。 我在这里把这个版本的配置是一个起点,你可以修改它,让它做你想做的。 3. selector告诉崇高哪些文件会自动(在这种情况下,所有的C ++文件)使用此版本4. workig_dir我将它设置为当前目录,使其更容易5. syntax ,当你建立你的文件的输出会在输出视图中显示被作为一个没有语法高亮纯文本。 在这里,我将使用C++output.tmLanguage文件,稍后我会解释它可以帮助您得到更好的凸显输出,方便调试。 6. file_regex误差线相匹配的输出,如果有一个错误,你就可以带你到相应的文件中的错误双击。

添加新的语法

有增加新的语法高亮升华的各种方式。 您可以使用JSON,然后将其转换为plist中,您可以直接使用的plist。 为简单起见只复制下面的一个名为c++output.tmLanguage 。 tmLanguage文件会自动由崇高的文本在应用亮点文件的启动回升。

内容应该如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>fileTypes</key>
  <array>
    <string>ssraw</string>
  </array>
  <key>name</key>
  <string>Mazanin</string>
  <key>patterns</key>
  <array>
    <dict>
      <key>match</key>
      <string>\b(error)\b</string>
      <key>name</key>
      <string>invalid.illegal</string>
    </dict>
    <dict>
      <key>match</key>
      <string>(warning|instantiation|note|required|candidate)</string>
      <key>name</key>
      <string>markup.quote</string>
    </dict>
    <dict>
      <key>match</key>
      <string>^.*:[0-9]+</string>
      <key>name</key>
      <string>support.variable.mazanin</string>
    </dict>
    <dict>
      <key>begin</key>
      <string>\[</string>
      <key>beginCaptures</key>
      <dict>
        <key>0</key>
        <dict>
          <key>name</key>
          <string>punctuation.definition.mazanin</string>
        </dict>
      </dict>
      <key>end</key>
      <string>\]</string>
      <key>endCaptures</key>
      <dict>
        <key>0</key>
        <dict>
          <key>name</key>
          <string>punctuation.definition.mazanin</string>
        </dict>
      </dict>
      <key>name</key>
      <string>comment.mazanin</string>
      <key>patterns</key>
      <array>
        <dict>
          <key>match</key>
          <string>\\.</string>
          <key>name</key>
          <string>source.mazanin</string>
        </dict>
      </array>
    </dict>
    <dict>
      <key>begin</key>
      <string>\(</string>
      <key>beginCaptures</key>
      <dict>
        <key>0</key>
        <dict>
          <key>name</key>
          <string>punctuation.definition.mazanin</string>
        </dict>
      </dict>
      <key>end</key>
      <string>\)</string>
      <key>endCaptures</key>
      <dict>
        <key>0</key>
        <dict>
          <key>name</key>
          <string>punctuation.definition.mazanin</string>
        </dict>
      </dict>
      <key>name</key>
      <string>storage.mazanin</string>
      <key>patterns</key>
      <array>
        <dict>
          <key>match</key>
          <string>\\.</string>
          <key>name</key>
          <string>source.mazanin</string>
        </dict>
      </array>
    </dict>
  </array>
  <key>scopeName</key>
  <string>source.cerr</string>
  <key>uuid</key>
  <string>ca03e751-04ef-4330-9a6b-9b99aae1c418</string>
</dict>
</plist>

别忘了将UUID(串)上面唯一的UUID。 但你如何得到一个。 打开在以下崇高的控制台和类型:

import uuid
uuid.uuid4()

现在你基本上完成。 打开你的C ++文件,呼吁建立在这一点,你应该能够看到错误高亮显示并点击如下(我用的黎明主题)。

我个人更喜欢包裹输出误差的线条和解开他们快,所以我在我的keymappings加入该快捷方式$SUBLIME_CONFIG_DIR/Default (Linux).sublime-keymap它说:

[
  {
    "keys": ["ctrl+shift+l"], "command": "toggle_setting", "args": {"setting": "word_wrap"}
  }
]

现在,如果你prese ctrl+shift+l ,你可以简单地包装/解包输出这大多数情况下是比较有用的,当误差是长,信息是没有帮助的。 上面的例子不用包裹将如下所示:

使用YAML

您还可以使用YAML来形容你的语法高亮规则,更简洁,更容易修改。 但是,你需要有PackageDev对您崇高的安装,以便能够使用YAML语言。 把下面的文件在你的$HOME/.config/sublime-text-3/Packages/User ,并与崇高打开它。 按F7和语法文件会为您生成。

# [PackageDev] target_format: plist, ext: tmLanguage
---
name: C++ Error Output
scopeName: source.boo
fileTypes: [boo]
uuid: 45319b4d-90f8-4ff1-9a66-c56ed5c408a4

patterns:
- include: '#pars'
- include: '#bracs'
- include: '#anglebracs'
- include: '#quotes'
- include: '#curlies'
- match: \b((e|E)rror)\b
  name: invalid.illegal
- match: (warning|instantiation|note|required|candidate)
  name: markup.quote
- match: ^[^\:\s]*(?=:)
  name: support.variable
- match: (?<=:)[0-9]+
  name: keyword.control

repository:
  bracs:
    name: markup.quote
    begin: \[
    beginCaptures:
      '0': {name: keyword}
    end: \]
    endCaptures:
      '0': {name: keyword}
    patterns:
    - include: $self
    - include: anglebracs
    - include: pars
  pars:
    name: variable.parameter
    begin: \(
    beginCaptures:
      '0': {name: keyword}
    end: (\)|$)
    endCaptures:
      '0': {name: keyword}
    patterns:
    - include: $self
    - include: anglebracs
  anglebracs:
    name: markup.raw
    begin: (?<!<)\<(?!\<)
    beginCaptures:
      '0': {name: keyword}
    end: \>
    endCaptures:
      '0': {name: keyword}
    patterns:
    - include: $self
    - include: pars
  quotes:
    name: markup.heading
    begin: ‘
    beginCaptures:
      '0': {name: keyword}
    end: ’
    endCaptures:
      '0': {name: keyword}
    patterns:
    - include: $self
    - include: anglebracs
    - include: pars
    - include: bracs
  curlies:
    name: markup.list
    begin: \{
    beginCaptures:
      '0': {name: keyword}
    end: \}
    endCaptures:
      '0': {name: keyword}
    patterns:
    - include: $self
    - include: anglebracs
    - include: pars
    - include: bracs
...

你可以找到颜色名称的列表中的位置



Answer 3:

这是方式 ,我用来解决这个问题,它可能不是最好的,但它有很大帮助,如果您有大量模板的C ++代码。



文章来源: How do you get Vim to highlight C++ syntax errors like Visual Studio?