【问题标题】:Strikeout text in vim?vim中的删除文本?
【发布时间】:2012-01-18 22:53:08
【问题描述】:

Vim(有或没有插件——我不在乎)是否支持删除线文本?我发现自己在其中保留了一个“待办事项”的运行列表,并且希望能够通过删除线文本“划掉”我已完成的项目。

谢谢!

【问题讨论】:

  • 为什么不改变该行的突出显示以区分它?
  • @abcd why not just change the highlighting for that line to differentiate 也许是因为它不够漂亮? :) 这只是问题的一个重点,作者明确告诉我们他希望能够to "cross off" my done items, via strikethrough text. 这就是他在 Vim 中寻找support strikethrough text 的原因。这是问题作者的愿望和意愿。为什么不理他?无论如何,如果你真的想提供另一种在 Vim 中“划掉”文本的方法,也许最好用细节来做(在答案中)?

标签: vim vi macvim


【解决方案1】:

你可以把它放在你的 .vimrc 中

map _ a<C-V>u0336<Esc><Space>

然后下划线字符将“删除”光标下的任何内容,类似于 ~(波浪号)如何改变大小写。

它是这样工作的:

a - 在光标下的字符之后开始追加
<C-V>u0336(代表Control-V后跟u0336) - 删除覆盖组合字符
<Esc> - 存在追加模式
<Space> - 将光标移过删除线字符

Vim 为下划线 (_) 字符指定了另一种含义(请参阅 :help _),因此您可能需要选择另一个字符(或多个字符的序列)。

【讨论】:

    【解决方案2】:

    您可以通过将 unicode“长罢工叠加组合字符”(0336) 附加到字符来创建(单个)删除线字符。例如,要创建删除线“Z”,请输入(在输入模式下):

    Z^Vu0336
    

    (其中 ^V 是 CTRL-V)。

    您可以使用 :s(替代)删除一堆字符,例如删除当前行:

    :s/./&^Vu0336/g
    

    维基百科链接:strikethroughcombining chaaracter

    【讨论】:

    • 为了避免其他人混淆:s/./&^Vu0336/g是你输入的方式,所以它看起来像:s/./&̶/g
    • 我喜欢这个!谢谢你。但是如何删除三振呢?
    【解决方案3】:

    它与终端中的 unicode vim 完美配合。

    只要把它放在我的 vim vundle 文件中:

    https://github.com/crux/crux-vimrc/blob/master/plugin/unicode.vim

    带有下划线和删除线的视觉模式键映射。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 下面是链接后面的内容,因为我不确定此处的代码格式化选项,所以将其省略,现在收到“太长..”错误消息,(叹气),在尝试之后五次获得预先格式化的代码插入这里我放弃了......
    【解决方案4】:

    想要一个更简单的突出显示解决方案,我会使用 Vim 自定义语法突出显示规则,例如,标记如下的文本:

    ~~文字~~

    以不同的颜色显示(例如,如果您有深色背景,则显示较深的文本颜色,或者显示为深色反转颜色)。 在 vimrc 中是这样的:

    au BufRead,BufNewFile *.txt   syntax match StrikeoutMatch /\~\~.*\~\~/   
    hi def  StrikeoutColor   ctermbg=darkblue ctermfg=black    guibg=darkblue guifg=blue
    hi link StrikeoutMatch StrikeoutColor
    

    (au 命令仅用于将规则应用于文件类型 .txt 文件)

    【讨论】:

    • 就个人而言,我发现这是最好/最简单的实现。我不需要实际的删除线,我只需要一些指示我可以在我的大脑中映射到删除线,这是最简单的方法。我添加了一些重映射命令以适合我自己的口味,现在它很完美。
    • 我也喜欢这种方法。 @Raj,你会分享你的映射吗?
    • @pschulz 除了上面的语法突出显示之外,我还添加了nnoremap <leader>st I~~ <ESC>A ~~<ESC>:noh<CR> nnoremap <leader>ust :s/^\~\~ //<CR>:s/ \~\~$//<CR>:noh<CR> 这使我可以轻松地添加或删除每行的删除突出显示。我发现我不需要选择,但您也可以轻松地为此添加映射。
    • 抱歉,我无法预览评论,我试图正确设置格式,然后我的评论编辑超时,但这些 nnoremap 命令位于两行不同的行。
    【解决方案5】:

    有一个patch pending,可以在 gui 中完成这项工作。不幸的是,这目前隐藏在待办事项列表中,因此需要我一段时间,直到被 Bram 应用。

    【讨论】:

      【解决方案6】:

      如果您使用的是 Unicode 文本,则可以使用组合字符来实现此目的。以下文章描述了如何在 gvim 中实现这一点:

      http://vim.wikia.com/wiki/Create_underlines,_overlines,_and_strikethroughs_using_combining_characters

      您需要确保 gvim 使用的字体支持适当的字符,在 Windows 上 ConsolasCourier New 似乎都能正确处理这个问题,但其他大多数都没有。

      【讨论】:

      • 我无法使用 Consolas 或 Courier New 在 XP 上的 Vim73 下工作。 enc=utf-8,fileenc 也是。仍然显示“垃圾”。
      • +1,在我的 TODO 文件中工作正常。在我的代码中也在 TODO 中工作,谢谢:)。
      • 组合字符不适用于我在 Windows 7 下的 ConEmu 中的 Vim74 和 Consolas。 :( 不过,很好的答案,+1。
      • 这对我在 OS X 上非常有用。对于那些使用 iTerm2 的人的另一个提示 - 我的默认字体 (Inconsolata) 中的删除字符看起来一点也不好看,所以我启用了“使用非 ASCII 字符的不同字体”选项。 Courier 看起来好多了。
      【解决方案7】:

      如果你在终端下使用 Vim,不可以。

      1. 突出显示普通终端的参数

                                      *bold* *underline* *undercurl*
                                      *inverse* *italic* *standout*
        

        term={attr-list} attr-list *highlight-term* E418 attr-list 是一个逗号分隔的列表(没有空格) 以下项目(按任何顺序): 大胆的 强调 undercurl 并不总是可用 逆转 反向与反向相同 斜体 脱颖而出 NONE 没有使用属性(用于重置它)

        请注意,此处可以使用“粗体”,也可以使用粗体。他们 有同样的效果。 “undercurl”是一个卷曲的下划线。当“undercurl”是不可能的 然后使用“下划线”。一般来说,“undercurl”仅适用于 图形用户界面。颜色用|highlight-guisp| 设置。 ~

      但是,在 GUI 下,您可以这样做。在'guifont' 下,我们有以下内容:

        For the Win32 GUI                                       *E244* *E245*
        - takes these options in the font name:
                hXX - height is XX (points, can be floating-point)
                wXX - width is XX (points, can be floating-point)
                b   - bold
                i   - italic
                u   - underline
                s   - strikeout
                cXX - character set XX.  Valid charsets are: ANSI, ARABIC,
                      BALTIC, CHINESEBIG5, DEFAULT, EASTEUROPE, GB2312, GREEK,
                      HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS,
                      SYMBOL, THAI, TURKISH, VIETNAMESE ANSI and BALTIC.
                      Normally you would use "cDEFAULT".
      
          Use a ':' to separate the options.
        - A '_' can be used in the place of a space, so you don't need to use
          backslashes to escape the spaces.
        - Examples: >
            :set guifont=courier_new:h12:w5:b:cRUSSIAN
            :set guifont=Andale_Mono:h7.5:w4.5
      

      【讨论】:

      • 既然 guifont 是全球性的,你将如何只画出一部分文本?
      • -1 Obviously 你的说法是错误的。
      • @bitmask - 你的陈述更糟糕 - 它没用。它没有添加为什么上述错误的信息,没有关于问题解决方案的有用信息,并且仅作为垃圾邮件,我们试图在此处将其最小化。所以请不要留下“这很糟糕”类型的 cmets。
      • @ldigas:我提供了一个链接,指向伪造陈述的答案。我很少投反对票,而且我认为总是留下便条是有礼貌的,我为什么这样做。我相信大多数人认为不说为什么而投反对票是粗鲁的。
      • 如果这个答案是错误的,为什么它(仍然)被接受?版主不能不接受吗?
      【解决方案8】:

      不,vim 不支持这个。它是一个文本编辑器,而不是所见即所得的编辑器。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2014-04-17
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多