在vim中如何使用删除线?

14

Vim(带插件或不带插件-我不关心)是否支持删除线文本? 我发现自己在Vim中维护着一个“待办事项”列表,并且希望能够通过删除线文本来“划掉”已完成的项目。

谢谢!


为什么不只是改变那一行的高亮显示来区分它呢? - user616736
2
@abcd为什么不改变该行的高亮度以区分?也许因为这样不够好看? :) 这只是问题的一个要点,作者明确地让我们理解他想能够通过删除线文本来“划掉”我的已完成项目。这就是他在寻找 Vim 中“支持删除线文本”的原因。这是问题作者的愿望和意愿。为什么要忽视他呢?无论如何,如果你真的想提供另一种在 Vim 中“划掉”文本的方法,也许最好在回答中详细说明? - kenichi
8个回答

21

1
我无法在XP上的Vim73中使用Consolas或Courier New使其正常工作。enc=utf-8,文件编码也是如此。仍然显示“垃圾”。 - Rook
+1,在我的TODO文件中运行良好。在我的代码的TODO中也起作用,谢谢 :)。 - 0xc0de
组合字符在Windows 7下的ConEmu中,使用Consolas字体和Vim74对我不起作用。 :( 不过,回答很好,+1。 - Keith Pinson
这在我的 OS X 上非常好用。对于那些使用 iTerm2 的人,另一个提示是,在我的默认字体(Inconsolata)中,删除线字符看起来不太好,因此我启用了“对于非 ASCII 字符使用不同的字体”选项。Courier 看起来显著更好。 - Cardano

13

为了采用更简单的高亮显示解决方案,我会使用 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
我也喜欢这种方法。@Raj,请问您能分享一下您的映射吗? - pschulz
除了上面的语法高亮之外,我还添加了以下内容:nnoremap <leader>st I~~ <ESC>A ~~<ESC>:noh<CR> nnoremap <leader>ust :s/^\~\~ //<CR>:s/ \~\~$//<CR>:noh<CR>这使我能够轻松地按行添加或删除删除线突出显示。我发现我不需要选择,但您也可以轻松添加映射。 - Raj
抱歉,我无法预览评论,一直在尝试调整格式,然后我的评论编辑超时了,但是那些 nnoremap 命令位于两行。 - Raj

7
你可以将以下内容放入你的 .vimrc 文件中: map _ a<C-V>u0336<Esc><Space> 然后,光标下的任何内容都会被“穿透化”,这类似于波浪号(~)更改大小写。
它的工作原理如下: a - 在光标下的字符后开始附加
<C-V>u0336(表示 Control-V 加上 u0336)- 穿透线覆盖组合字符
<Esc> - 退出追加模式
<Space> - 将光标移到穿透字符之后
在 VIM 中,Underscore(_)字符有另一种含义(参见 :help _),因此您可能需要选择另一个字符(或多个字符的序列)。

为了删除一个整个的可视选中文本部分,请尝试:s/\%V\(.\)/\=submatch(1) . "\u0336"/g,其中\%V使替换操作在选择上进行,而\=则使得替换字符串中可以使用Unicode字符。 - sampi

7

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

Z^Vu0336

(其中^V代表CTRL-V)。

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

:s/./&^Vu0336/g

维基百科链接:删除线组合字符


1
为了避免其他人的困惑,:s/./&^Vu0336/g 是输入该命令的方式,因此它将显示为 :s/./&̶/g - Alex
我喜欢这个!谢谢。 但是如何去掉删除线? - dado

3

在终端中使用Unicode Vim,它可以完美地工作。

只需将其放入我的Vim Vundle文件中:

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

-nargs=0 Overline        call s:CombineSelection(<line1>, <line2>, '0305') command! -range -nargs=0 Underline       call
s:CombineSelection(<line1>, <line2>, '0332') command! -range -nargs=0
DoubleUnderline call s:CombineSelection(<line1>, <line2>, '0333')
command! -range -nargs=0 Strikethrough   call
s:CombineSelection(<line1>, <line2>, '0336')

function! s:CombineSelection(line1, line2, cp)   execute 'let char =
"\u'.a:cp.'"'   execute
a:line1.','.a:line2.'s/\%V[^[:cntrl:]]/&'.char.'/ge' endfunction

vnoremap  :Strikethrough<CR> vnoremap __ :Underline<CR> ```

3
虽然这个链接可能回答了问题,但最好在这里包含答案的关键部分并提供链接作为参考。只有链接的答案如果链接页面更改,就会变得无效。 - Mamoun Benghezal
1
以下是链接背后的内容,我没有包含它,因为我对这里的代码格式选项不确定,现在出现了一个“太长...”的错误消息(叹气)。尝试了五次在此处插入预格式化代码后,我放弃了... - Dirk Lüsebrink

1

目前有一个待处理的补丁, 可以使此功能在GUI中工作。不幸的是,它目前被埋在待办事项列表中,所以需要一段时间才能被Bram应用。


-4

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


10
显然,你的陈述是错误的。 - bitmask

-7

如果你在终端下使用Vim,那么不行。

突出显示普通终端的参数
*粗体* *下划线* *下划线波浪* *反转* *斜体* *突出显示*
term={attr-list} attr-list *highlight-term* E418 attr-list是一个逗号分隔的列表(无空格),包含以下项目(任意顺序): 粗体 下划线 下划线波浪 不一定始终可用 反转 斜体 突出显示 NONE 不使用属性(用于重置)
请注意,"粗体"可以在此处使用,并使用粗体字体。它们具有相同的效果。 "下划线波浪"是一种波浪形下划线。当不支持"下划线波浪"时,将使用"下划线"。通常情况下,"下划线波浪"仅在图形用户界面中可用。颜色由|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

9
很明显,你的陈述是错误的。 - bitmask
6
@bitmask - 你的评论甚至更糟 - 它是毫无用处的。它没有解释为什么上面的内容是错的,也没有提供有用的解决问题的信息,只会被视为垃圾邮件,而我们正在尽量减少这种情况。因此,请不要留下“这很糟糕”的类型评论。 - Rook
5
@ldigas:我在回答中包含了一个链接,证明了该陈述是错误的。我极少会给负面评价,而且我认为始终留下说明原因是礼貌的表现。我相信,大多数人认为没有说明原因就直接给负面评价是不礼貌的行为。 - bitmask
@Idigas:答案很简单,使用特殊的:higlight语句,因为它们支持设置字体(虽然不是在所有Vim版本中)。还可以参见:h highlight-font。 - Christian Brabandt
2
如果这个答案是错误的,为什么它(仍然)被接受了?版主不能取消接受吗? - Nikos Alexandris
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接