Heim  >  Fragen und Antworten  >  Hauptteil

vims Conceaalcursor und Conceaallevel?

Bei der Verwendung von Neosnippet sind Probleme aufgetreten
Nun, das Problem ist Folgendes: Wenn ich Neosnippet zum Erweitern eines Snippets verwende, werden diese Tabstops gemäß dem vom Autor angegebenen Initialisierungs-Plug-In-Code ausgeblendet. Dann speichern und beenden Sie die Datei sofort. Wenn Sie die Datei erneut öffnen, werden Sie feststellen, dass Tabstop in den Text eingefügt wird. Dies ist ein Problem, das ich dem Autor auf github gemeldet habe .com/Shougo/neosnippet.vim/issues/236#issuecomment-44950979
Der Autor sagte mir auch, dass dies eine Funktion sei, aber als ich schließlich fragte, wie man das Problem lösen könne, dass Tabstopps in den Text eingefügt würden, bat er mich, einen Blick darauf zu werfen

:Hilfe zum Verbergen

:hilf, den Cursor zu verbergen

Ich habe es gelesen, weiß aber immer noch nicht, wie ich dieses Problem lösen kann.

Eigentlich ist meine Frage, ob der Tabstopp nicht in den Text eingefügt wird

Das Bild unten ist der Tabstop, der erscheint, wenn ein Snippet erweitert wird (ich habe die vom Autor empfohlenen Einstellungen gelöscht, damit der Tabstop sichtbar ist)


Als nächstes verlassen Sie den Text sofort und öffnen ihn erneut. Sie werden sehen, dass der Tabstopp in die Datei eingefügt wird

漂亮男人漂亮男人2712 Tage vor827

Antworte allen(1)Ich werde antworten

  • 巴扎黑

    巴扎黑2017-05-16 16:43:08

    那东西是插件里的占位符,请不要叫它们 tabstop,因为 tabstop 在 vim 里是有特定的意思的,你这样一说,我看了半天才明白你说的是什么。

    首先那些占位符是肯定有用的,当你展开代码片段的时候占位符帮助你确定需要填写的代码的位置。我个人觉得比较纳闷的一点是:你都展开一个代码片段了,你不把它填完却直接关掉文件再打开,这是何故?好奇葩的操作习惯啊!

    不过呢,即使应对奇葩人士 vim 也有足够的办法,Shougo 让你看的那个东东,在 vim 里叫做 conceal (text),用汉语理解就是“隐藏字符”。Neosnippet 里的那些占位符就是隐藏字符,你可以调整隐藏字符是否/如何呈现。

    隐藏字符并不是真的隐藏起来了,它是 vim syntax 里的一种特殊语法,你可以用语法配置命令设置隐藏字符的视觉状态,所以如果你发现隐藏字符的设置和你想的不完全一样,那么也许你正在使用的语法(配色)有这方面的设置,你可以换一个或者钻进去看看。

    接下来说说常规情况下那两个选项:conceallevelconcealcursor

    当文本被标记为“隐藏字符”的时候,conceallevel 决定这些文本如何显示,它有四个值:

    1. 设为 0,不隐藏,该咋样还是咋样(这是默认值,所以占位符依然看得见)

    2. 设为 1,每一块隐藏字符用一个特殊字符来替换,这个字符是由当前使用的语法配置设置的,如果语法高亮没有,那就使用 listchars 选项里设置的字符,如果这也没有,默认的替换字符是一个空格

    3. 设为 2,让隐藏字符完全隐藏(意思是即便默认的空格也不用),但如果语法配置里有设置替换字符的话,就用设置的

    4. 设为 3,完全不显示隐藏字符,不管有没有任何设置。

    到目前为止,你可能觉得设置成 3 最清爽了吧,但是你要小心,完全不显示隐藏字符就意味着一旦某些插件自作主张替你设置了隐藏字符,你是永远也看不到它们的!比如说我曾经用过一个 JSON 的语法高亮插件,不知道作者是怎么想的,他把所有的 ; 都设置成了隐藏字符,搞得我纳闷了好久……

    如果你一定要完全不显示隐藏字符,那么你至少要考虑一下如何搭配 concealcursor 来使用。默认状态下,vim 不会对当前光标所在行的隐藏字符采取 conceallevel 的设置,也就是说不管你怎么设置,当前光标所在行的隐藏字符都是会显示出来的,concealcursor 决定了在 vim 的四种主要模式里(常规、插入、可视、命令),当前光标所在行是否显示隐藏字符。

    补充一下:对于命令模式,当前光标所在行指得是搜索时的高亮匹配位置。

    这个选项默认是空,所以在四种模式下当前光标所在行都会显示隐藏字符,你可以在 n i v c 四个值里挑选组合来设置你希望的方式。就拿你这个例子来说吧,比方说你希望除了插入模式以外,剩下的时候我都不希望看到这些占位符(隐藏字符),那就 set concealcursor='nvc'。如果你对这些代码片段了如指掌,那么插入模式下不显示隐藏字符也没关系。

    顺便你可以试试 UltiSnips,这个插件比 NeoSnippets 简单一些,而且全面兼容 NeoSnippets 的代码片段,挺适合初学者的(功能绝对不差哦)。

    Antwort
    0
  • StornierenAntwort