天道酬勤,学无止境

使Vim将所有空格显示为字符(Make Vim show ALL white spaces as a character)

问题

我找不到一种使Vim将所有空白显示为字符的方法。 我发现的只是关于制表符,尾随空格等。

回答1

正如其他人所说,您可以使用

:set list

结合

:set listchars=...

显示不可见的字符。
现在,没有可用于显示空白的显式选项,但是在列表字符中,您可以设置一个字符以显示所有但空白。 例如,我的看起来像这样

:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

所以,现在,在您使用之后

:set list

那么,所有没有明确显示为其他内容的东西,实际上就是一个普通的旧空格。

与往常一样,要了解listchars工作原理,请使用帮助。 它提供了有关可以显示哪些字符(例如尾随空格)以及如何执行此操作的重要信息:

:help listchars

向其中添加切换可能会有所帮助,以便您可以轻松地在编辑过程中查看更改(来源:VIM:set list!作为.vimrc中的切换):

noremap <F5> :set list!<CR>
inoremap <F5> <C-o>:set list!<CR>
cnoremap <F5> <C-c>:set list!<CR>
回答2

从7.4.710补丁开始,您现在可以使用listchars设置要显示在空间位置的字符!

:set listchars+=space:␣

因此,要将所有空白字符显示为字符,可以执行以下操作:

:set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
:set list

关于邮件列表的讨论:https://groups.google.com/forum/?fromgroups#!topic/vim_dev/pjmW6wOZW_Q

回答3

:set list启用。

:set nolist禁用。

回答4

我认为这里的其他答案更全面,但我想我会分享一个技巧,通常用于视觉上区分制表符和空格:

:syntax on
:set syntax=whitespace

这些是Whitespace编程语言的语法突出显示规则-选项卡以绿色显示,空格以红色显示。 :)

可以与:set list结合使用,如许多其他答案所述,尽管选项卡随后将显示为^ I,而没有绿色高亮显示,但空格将显示为红色。

回答5

:set list将所有空格显示为字符。 一切,但空间看起来会比正常状态,这意味着如果你仍然可以看到一个普通的老式空间,这真是一个普通的旧空间的不同。 :)

回答6

如果您设置:

:highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none

然后搜索空格,每个空格字符将显示为下划线字符。

您可以在方便的功能中使用此命令,该功能可切换空格的“下划线”。

set hls
let g:HLSpace = 1
let g:HLColorScheme = g:colors_name
function ToggleSpaceUnderscoring()
    if g:HLSpace
        highlight Search cterm=underline gui=underline ctermbg=none guibg=none ctermfg=none guifg=none
        let @/ = " "
    else
        highlight clear
        silent colorscheme "".g:HLColorScheme
        let @/ = ""
    endif
    let g:HLSpace = !g:HLSpace
endfunction

使用以下功能将功能映射到快捷键:

nmap <silent> <F3> <Esc>:call ToggleSpaceUnderscoring()<CR>

注意:设置了colorcheme后,请在vimrc中定义功能。

回答7

根据您当前缓冲区的语法规则,类似的方法可能会起作用:

:syn match WhiteSpace / / containedin=ALL conceal cchar=Æ
:setl conceallevel=2 concealcursor=nv

这需要具有+ conceal功能的vim 7.3

2014年10月24日更新要对此进行扩展。 当然可以为锥形字符定义一些突出显示。

  • 您可以配置隐藏字符的外观。 要突出显示,您至少必须配置一次“隐藏”突出显示组(请参见:h hl-Conceal的帮助。可以在您的配色方案中完成此操作,然后无需再次配置它。但这会影响所有隐藏的对象。字符(例如,如果您的语法脚本隐藏了更多项目,它们将显示为空白字符)。看起来可能像这样:

    :hi Conceal ctermfg=7 ctermbg=NONE guifg=LightGrey guibg=NONE

  • 如果语法脚本使用skipwhite关键字,似乎Vim不会突出显示空格。 将无法解决(也许这将得到解决,我发布了一个补丁)

  • 似乎有一个补丁在浮动,可以自定义list模式下的空间外观。 在撰写本文时,最新的版本似乎就是此版本。 (这意味着,您需要构建自己的Vim才能使用它)。
  • conceallevelconcealcursor是窗口本地选项。 这意味着它们在不同的窗口中可以有所不同(并且也可能由文件类型插件或其他插件脚本来设置)。
  • 每当重新加载语法定义文件时,都需要执行语法突出显示组。 这可以使用BufWinEnter或可能的Syntax甚至FileType自动命令来完成。 (我尚未测试哪一个实际有效)。

最后两项意味着,您将必须设置一些自动命令来重置语法规则和相应的选项。 对于第一个,可能要使用ColorScheme自动命令来设置突出显示(以便隐藏的字符始终看起来相同,而与颜色方案的实际设置无关)。 要获得完整的解决方案,请查看romainl答案,这应该为您提供一个开始。 如果您设置了功能,则可以轻松地设置一个切换命令来打开或关闭显示特殊高亮显示的功能。

2014年10月26日更新,我从这个问题中制作了一个插件。

2015年4月22日更新Vim中已包含一个修补程序,可使用list选项来实现此目的。 只需设置set list listchars+=space:␣可以从Vim 7.4.711开始使用

回答8

我用这个

/\s
:set hlsearch

突出显示空白。 它搜索所有空白,然后启用突出显示以使其弹出。 但是,它打印特殊字符。

回答9

如果用空格表示“”字符,我的建议是搜索/替换。 正如其他人所暗示的那样, set list会将非打印字符更改为在listchars配置的可见字符。

为了将空格显示为其他字符,可以使用类似于以下内容的方法:

:%s/ /█/g

然后只需撤消更改以再次返回即可。

(为获得█,我按了此确切的按键顺序:: s / / CTRL-K F B / g

回答10

要突出显示空格,只需搜索它:

/ <空格>

笔记:

  • <space>表示只需键入空格字符。
  • 启用:set hlsearch突出显示搜索结果

    突出显示空格和制表符:

    / [<空格> <tab>]

    删除突出显示的一种快速方法是搜索其他内容:/ asdf

    (只需输入任何简短的随机字符列表)

  • 回答11

    下面的代码基于Christian Brabandt的答案,似乎可以满足OP的要求:

    function! Whitespace()
        if !exists('b:ws')
            highlight Conceal ctermbg=NONE ctermfg=240 cterm=NONE guibg=NONE guifg=#585858 gui=NONE
            highlight link Whitespace Conceal
            let b:ws = 1
        endif
    
        syntax clear Whitespace
        syntax match Whitespace / / containedin=ALL conceal cchar=·
        setlocal conceallevel=2 concealcursor=c
    endfunction
    
    augroup Whitespace
        autocmd!
        autocmd BufEnter,WinEnter * call Whitespace()
    augroup END
    

    将这些行添加到~/.vimrc并开始一个新的Vim会话,以查看仍不完美的魔术发生的情况。

    随意编辑默认颜色和隐藏字符。


    注意: *FuncBody语法组中的几种语言阻止了中间点的显示。 我不知道(尚未?)如何使该解决方案更可靠。

    回答12

    这个问题的所有其他答案让我感到沮丧,因为它们都没有以有用的方式突出显示空格字符。 将空格显示为字符对于空格格式的语言特别有用,因为空格和制表符混合使用是有害的。

    我的解决方案是显示选项卡并在多个空格下划线。 它借鉴了mrucci的答案和本教程。 因为它使用语法高亮显示,所以它是持久的:

    set list listchars=tab:\|\ 
    highlight Whitespace cterm=underline gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
    autocmd ColorScheme * highlight Whitespace gui=underline ctermbg=NONE guibg=NONE ctermfg=yellow guifg=yellow
    match Whitespace /  \+/
    

    使用此选项卡显示为|_作为空格,这使我很容易分辨出何时混合代码样式。

    我发现的唯一缺点是,此代码段无法调整背景颜色以匹配上下文(例如在评论中)。

    回答13

    上面所有的答案都试图使vim内部的空间可见。 如果您真的坚持将可见的空间作为点,那么还有另一种方法...

    如果不能在vim中完成,请完全更改字体。 我复制了Ubuntu One Mono字体,并使用FontForge对其进行了编辑。 记住要更改字体的全名,家族,首选家族,兼容的完整字体(在FontFoge中,它在字体信息中的TTF名称下),以便将其作为单独的字体使用。 只需编辑空格字符在中间有一个点,然后将字体保存到〜/ .fonts,现在您就可以将其用于gvim或整个终端了……我复制了“!” 字符,删除线并将点移到中间。 花了超过5分钟的时间...

    注意:更改空格字符(0x20)会导致在整个vim屏幕上出现点的不便...(但是它将空格与制表符分开...)

    回答14

    从现有答案中找不到我想要的东西。 下面的代码将用红色突出显示所有尾随空格。 只需将以下内容添加到您的.vimrc

    highlight ExtraWhitespace ctermbg=red guibg=red
    match ExtraWhitespace /\s\+$/
    autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
    autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
    autocmd InsertLeave * match ExtraWhitespace /\s\+$/
    autocmd BufWinLeave * call clearmatches()
    
    回答15
    :match CursorLine /\s\+/
    

    避免使用“您必须搜索空格才能使它们显示出来”的位,但是无法将afaict配置为对空格进行非突出显示的操作。 CursorLine可以是任何亮点组,并且在默认主题中是普通下划线。

    回答16

    我喜欢使用特殊字符来显示空格,这一点更加清楚。 快速切换甚至是要切换的地图也是一项关键功能。

    您可以在自2004年以来未更新的旧vim脚本中找到以下功能:

    vim-scripts/cream-showinvisibles@vim.org

    多亏了项目vim脚本和vundle,您可以使此插件复活

    vim-scripts / cream-showinvisibles @ github

    更好的是,我为此付出的两分钱是添加一个可配置的快捷方式(而不是预定义的F4

    所以将它添加到〜/ .vimrc

    Plugin 'albfan/cream-invisibles'
    
    let g:creamInvisibleShortCut = "<F5>" "for my F4 goto next error
    

    在vim上安装插件

    :PluginInstall
    

    然后你去

    回答17

    要覆盖Unicode空格字符,请执行以下操作:

    set list
    set listchars=tab:│\ ,nbsp:·
    highlight StrangeWhitespace guibg=Red ctermbg=Red
    " The list is from https://stackoverflow.com/a/37903645 (with `\t`, `\n`, ` `, `\xa0` removed):
    call matchadd('StrangeWhitespace', '[\x0b\x0c\r\x1c\x1d\x1e\x1f\x85\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]')
    

    结果:

    • 只有序数空间(U + 0020)看起来像一个空间(“ ”)
    • 选项卡(U + 0009)看起来像“ ”(两个字符:一个长管道,然后一个序数空格;它们在颜色上为灰色colorscheme murphy
    • 正常的不间断空格(U + 00A0)看起来像“ · ”(一个字符;在colorscheme murphy灰色)
    • 其他任何空格字符看起来都像红色的“
    回答18

    你可以用

    :set list
    

    真正看到一条线的结构。 您将明确看到选项卡和换行符。 当您看到空白时,实际上是空白。

    回答19

    突出显示搜索

    :set hlsearch 
    

    .vimrc中是

    并搜索空格和回车

    / \|\t\|\r
    

    或搜索所有空白字符

    /\s
    

    搜索所有非空白字符(不显示空白字符,因此您可以看到单词之间的空白字符,但看不到尾随的空白字符)

    /\S
    

    在行尾显示所有尾随空格字符

    /\s$
    
    回答20

    将这些hack作为注释保留在.vimrc中,因此在shell中,只需:

    echo '
      " how-to see the non-visible while spaces
      " :set listchars=eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣
      " set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
      " :set list
      " but hei how-to unset the visible tabs ?!
      " :set nolist
      ' >> ~/.vimrc
    
    回答21
    :se list
    :se nolist
    

    :se就足够了,不需要:set

    回答22

    您还可以突出显示空格(用块代替空格):

    :%s/ /█/g
    

    (在编写撤消之前)

    回答23

    将其添加到我的.vimrc文件中对我有用。 只要确保您没有其他冲突即可。

    autocmd VimEnter * :syn match space /\s/
    autocmd VimEnter * :hi space ctermbg=lightgray ctermfg=black guibg=lightgray guifg=black
    

    受限制的 HTML

    • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
    • 自动断行和分段。
    • 网页和电子邮件地址自动转换为链接。

    相关推荐
    • 如何修复Python缩进(How to fix Python indentation)
      问题 我有一些缩进不一致的Python代码。 制表符和空格的混合使用使情况变得更糟,甚至无法保留空格缩进。 该代码可以按预期工作,但是很难维护。 如何在不破坏代码的情况下修复缩进(如HTML Tidy,但对于Python)? 回答1 使用在Python安装的Tools/scripts/目录中找到的reindent.py脚本: 更改Python(.py)文件以使用4个空格的缩进,并且不使用硬制表符。 还要修剪行尾多余的空格和制表符,并删除文件末尾的空行。 还要确保最后一行以换行符结尾。 查看该脚本以获取详细的使用说明。 注意:如果您的Linux发行版默认没有使用Python安装reindent: 许多Linux发行版没有reindent默认安装python - >一个简单的方法来reindent是做pip install reindent 。 ps pip的替代方法是使用您的发行版软件包管理器(即apt-get , yum , dnf ),但是您需要弄清楚哪个软件包具有命令行工具,因为每个发行版在不同的软件包中都有该工具。 回答2 如果您使用的是Vim,请参见:h重新制表符。 *:ret* *:retab* :[range]ret[ab][!] [new_tabstop] Replace all sequences of white-space containing a <Tab>
    • Make Vim show ALL white spaces as a character
      I can't find a way to make Vim show all white spaces as a character. All I found was about tabs, trailing spaces etc.
    • makefile:4:***缺少分隔符。 停止(makefile:4: *** missing separator. Stop)
      问题 这是我的makefile: all:ll ll:ll.c gcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $< clean : \rm -fr ll 当我尝试make clean或make make ,出现以下错误: :makefile:4: *** missing separator. Stop. 我该如何解决? 回答1 make与制表符有非常愚蠢的关系。 每个规则的所有操作均由选项卡标识。 而且,不,四个空格都不构成制表符。 只有选项卡才能构成选项卡。 要检查,我使用命令cat -e -t -v makefile_name 。 它显示了带有^I的制表符以及带有$行尾的情况。 两者对于确保依存关系正确结束以及制表符标记规则的操作至关重要,以便make实用程序可以轻松识别它们。 例子: Kaizen ~/so_test $ cat -e -t -v mk.t all:ll$ ## here the $ is end of line ... $ ll:ll.c $ ^Igcc -c -Wall -Werror -02 c.c ll.c -o ll $@ $<$ ## the ^I above means a tab was there before the action part, so this line is ok . $ clean
    • 您的.vimrc中有什么? [关闭](What is in your .vimrc? [closed])
      问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 Vi和Vim允许进行非常棒的自定义,通常将其存储在.vimrc文件中。 程序员的典型功能是语法突出显示,智能缩进等。 您在.vimrc中隐藏了哪些其他用于生产性编程的技巧? 我对重构,自动类和类似的生产力宏特别感兴趣,尤其是对于C#。 回答1 你自找的 :-) "{{{Auto Commands " Automatically cd into the directory that the file is in autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ') " Remove any trailing whitespace that is in the file autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif " Restore cursor position to where
    • 使用Vim,最有效的快捷方式是什么?(What is your most productive shortcut with Vim?)
      问题 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 我听说过很多关于Vim的利弊。 看来,使用Vim(作为开发人员)应该比使用任何其他编辑器更快。 我正在使用Vim来做一些基本的事情,而我最多只能将Vim的生产率降低10倍。 在谈论速度时,您只需要注意两件事(您可能不太在意速度,但应该注意): 交替使用左右手是使用键盘的最快方法。 第二种方法是永远不要触摸鼠标,以使其尽可能快。 您动动手,抓住鼠标,将其移动并重新带回键盘需要花费很多时间(而且您经常必须查看键盘以确保将手正确地放回正确的位置) 这是两个例子,说明了为什么我对Vim的工作效率低得多。 复制/剪切和粘贴。 我一直都在做。 在所有当代编辑器中,您用左手按Shift ,然后用右手移动光标以选择文本。 然后按Ctrl + C复制,移动光标,然后按Ctrl + V粘贴。 使用Vim太可怕了: yy复制一行(您几乎从不想要整行!) [number xx]yy将xx行复制到缓冲区中。 但是您永远不会确切知道是否选择了想要的东西。 我经常必须先执行[number xx]dd然后u才能撤消! 另一个例子? 搜索并替换。 在PSPad中: Ctrl + f,然后输入要搜索的内容,然后按Enter 。 在Vim中: / ,然后键入要搜索的内容,然后在每个特殊字符前加上\
    • Sublime Text 2-查看空白字符(Sublime Text 2 - View whitespace characters)
      问题 Sublime Text如何显示不可打印的字符(我对SPACE和TAB感兴趣)? 回答1 要查看空白,设置为: // Set to "none" to turn off drawing white space, "selection" to draw only the // white space within the selection, and "all" to draw all white space "draw_white_space": "selection", 如果进入“首选项”->“默认设置”,则可以看到它。 如果您编辑用户设置(“首选项”->“设置”-“用户”)并按如下所示添加行,则应该获得所需的内容: { "color_scheme": "Packages/Color Scheme - Default/Slush & Poppies.tmTheme", "font_size": 10, "draw_white_space": "all" } 请记住,设置是JSON,所以没有尾随逗号。 回答2 在选定的文本中,空格显示为点(。),而TAB显示为破折号(-)。 回答3 我使用Unicode Character Highlighter ,可以显示空格和其他一些特殊字符。 套件控制添加者 安装软件包,unicode ... 回答4 如果您真的只想查看尾随空格
    • 如何防止冗长的单词打断我的div?(How to prevent long words from breaking my div?)
      问题 从TABLE布局切换到DIV布局以来,一个普遍的问题仍然存在: 问题:您用动态文本填充DIV,并且不可避免地会有一个超长单词延伸到div列的边缘,使您的网站看起来不专业。 RETRO-WHINING :表格布局从未发生过这种情况。 一个表格单元格总是可以很好地扩展到最长单词的宽度。 严重性:我什至在大多数主要站点上都遇到了这个问题,尤其是在德国站点上,这些站点甚至连“限速”之类的通用词都非常长(“ Geschwindigkeitsbegrenzung”)。 有人对此有可行的解决方案吗? 回答1 软连字符 您可以通过插入软连字符( ­ )来告诉浏览器在哪里拆分长字: averyvery­longword 可能被渲染为 veryverylongword 或者 每个- 长字 一个好的正则表达式可以确保除非必要,否则不会插入它们: /([^\s-]{5})([^\s-]{5})/ → $1­$2 浏览器和搜索引擎足够聪明,可以在搜索文本时忽略该字符,而Chrome和Firefox(尚未测试其他字符)在将文本复制到剪贴板时会忽略该字符。 <wbr>元素 另一个选择是注入<wbr> ,它是以前的IE-ism,现在已在HTML5中使用: averyvery<wbr>longword 不带连字符的换行符: 每个长字 您可以使用零宽度空格字符​来实现相同的功能​ (或&#x200B )。
    • 为什么HTML要求多个空格在浏览器中显示为单个空格?(Why does HTML require that multiple spaces show up as a single space in the browser?)
      问题 我很早就意识到,HTML文件中的任何空白集都只会显示为单个空格。 例如,这: <p>Hello. Hello. Hello. Hello. Hello.</p> 显示为: 你好。 你好。 你好。 你好。 你好。 这非常好,因为如果您需要多个空格的预格式化文本,则可以只使用<pre>标记。 但是是什么原因呢? 更准确地说,这在HTML规范中为何如此? 回答1 在HTML中压缩空间是因为在HTML的格式设置和呈现方式之间存在区别。 考虑这样的页面: <html> <body> <a href="mylink">A link</a> </body> </html> 例如,如果HTML使用空格缩进,则链接前面将带有多个空格。 回答2 正如其他人所说,它在HTML规范中。 如果要在输出中保留空格,可以使用<pre>标记: <pre>This text has extra spaces and newlines</pre> 但这通常也会以不同的字体显示文本。 回答3 尝试解决“为什么”的原因可能是因为HTML基于以这种方式指定的SGML。 反过来,它也是基于60年代初期的GML。 进行空白处理的原因很可能是因为当时一次将数据输入一张“卡”,这可能导致不希望的句子和段落分解。 旧版GML的一个不同之处在于,它规定句子之间必须有两个空格(例如旧的打字机规则)
    • 按文件类型更改Vim缩进行为(Changing Vim indentation behavior by file type)
      问题 有人可以简单地向我解释根据文件类型更改Vim缩进行为的最简单方法吗? 例如,如果我打开Python文件,则应缩进2个空格,但是如果我打开Powershell脚本,则应缩进4个空格。 回答1 您可以添加.vim文件,只要vim切换到特定文件类型即可执行。 例如,我有一个~/.vim/after/ftplugin/html.vim ,内容如下: setlocal shiftwidth=2 setlocal tabstop=2 这导致vim使用宽度为2个字符的制表符进行缩进( noexpandtab选项在我的配置中的其他位置全局设置)。 在此处进行了描述:http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4,向下滚动到“文件类型插件”部分。 回答2 使用ftplugins或自动命令来设置选项。 ftplugin 在~/.vim/ftplugin/python.vim: setlocal shiftwidth=2 softtabstop=2 expandtab 并且不要忘记在~/.vimrc打开它们: filetype plugin indent on ( :h ftplugin了解更多信息) 自动命令 在~/.vimrc : autocmd FileType python setlocal shiftwidth=2
    • 使git在提交之前自动删除尾随空格(Make git automatically remove trailing whitespace before committing)
      问题 我正在与团队一起使用git,并希望从diff,日志,合并等中删除空格更改。我假设最简单的方法是让git自动删除结尾的空格(以及其他空格错误) )中的所有提交。 我试图将以下内容添加到~/.gitconfig文件中,但是在我提交时它什么也没做。 也许它是为不同的东西而设计的。 有什么解决方案? [core] whitespace = trailing-space,space-before-tab [apply] whitespace = fix 如果有人对红宝石有任何特定的想法,我会使用红宝石。 下一步是提交之前自动进行代码格式化,但这是一个难题,并不是真正引起大问题。 回答1 这些设置( core.whitespace和apply.whitespace )不是用来删除结尾的空格,而是: core.whitespace :检测到它们并引发错误 apply.whitespace :剥离它们,但仅在修补过程中,而不是“始终自动” 我相信git hook pre-commit会为此做得更好(包括删除尾随空格) 请注意,在任何给定时间,您都可以选择不运行pre-commit挂钩: 临时: git commit --no-verify . 永久: cd .git/hooks/ ; chmod -x pre-commit cd .git/hooks/ ; chmod -x pre
    • Vim 80列布局问题(Vim 80 column layout concerns)
      问题 我在Vim中执行80列指示的方式似乎不正确: set columns=80 。 有时我还set textwidth ,但是我希望能够使用set columns替代项来查看和预期行溢出。 这有一些不幸的副作用: 我不能set number ,因为担心在行号顺序不同的文件之间进行拆分; 即<100行文件和> = 100行文件将需要两个不同的set columns值,因为用于额外数字显示的额外列。 我也开始新的(g)Vim会话,而不是垂直拆分窗口。 这是因为vsplit在每次打开或关闭窗格时强制我set columns ,因此开始新会话的麻烦就少了。 当您要set numbers ,垂直分割等时,如何处理80个字符的指示? 回答1 我在我的.vimrc中进行了设置: highlight OverLength ctermbg=red ctermfg=white guibg=#592929 match OverLength /\%81v.\+/ 对于超过80列限制的文本,这会以微妙的红色突出显示背景(无论如何,在GUI模式下都是微妙的-在终端模式下则是如此)。 回答2 从vim 7.3开始,您可以使用set colorcolumn=80 (简称set cc=80 )。 由于早期版本不支持此功能,因此我的.vimrc使用: if exists('+colorcolumn') set
    • 显示\ r \ n的文本编辑器? [关闭](Text Editor which shows \r\n? [closed])
      问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 4年前关闭。 改善这个问题 我正在寻找一个文本编辑器,可以向我显示实际的回车符和换行符。 例如,如果我保存以下字符串: "This\rIs\r\nA\nString" 而不是显示 This Is A String 我正在寻找一些文本编辑器,它将显示 This\rIs\r\nA\nString 我相信某些程序中的文本文件解析问题是由换行符/回车符/行尾不一致引起的。 我可以制作一个可以读取文件并以这种格式显示文件的程序,但是我认为,如果有人知道一个已经可以做到的程序,它将变得更加容易。 谢谢! [编辑] 忘记指定我在Windows上,安装Cygwin并不是真正的选择。 否则我会使用vi或vim。 另外,如果已经安装了PSPad中执行此操作的方法,那么如果您也知道这一点,那就太好了。 谢谢! 回答1 使用Notepad ++,您可以显示行尾字符。 它显示CR和LF,而不是“ \ r”和“ \ n”,但可以理解这一点。 但是,它仍将插入换行符。 但是您确实可以看到行尾字符。 要为此使用Notepad ++,请打开“查看”菜单,打开“显示符号”滑盖,然后选择“显示所有字符”或“显示行尾字符”。 回答2 在vi(m)中,签出: :help 'list'
    • 在vim中重新格式化以得到一个不错的列布局(reformat in vim for a nice column layout)
      问题 我在CSV文件中有这个数据集 1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153 1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0
    • Vim清除最后一个搜索突出显示(Vim clear last search highlighting)
      问题 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么您的答案正确的解释。 答案不够详细的答案可能会被编辑或删除。 在Vim中进行搜索后,我将所有出现的事件突出显示。 我该如何禁用呢? 现在,我再次搜索找不到的乱码。 有没有一种方法可以暂时禁用突出显示,然后在需要时重新启用它? 回答1 要关闭高亮显示,直到下一次搜索: :noh 或完全关闭突出显示: set nohlsearch 或者,要切换它: set hlsearch! nnoremap <F3> :set hlsearch!<CR> 回答2 从VIM文档 要清除上次使用的搜索模式: :let @/ = "" 这不会将模式设置为空字符串,因为它将在任何地方都匹配。 就像启动Vim一样,该模式已真正清除。 回答3 你可以做 :noh 或:nohlsearch暂时禁用搜索突出显示,直到下一次搜索为止。 回答4 我几年前在vim.org上找到了这个答案: 将以下内容添加到您的.vimrc中: "This unsets the "last search pattern" register by hitting return nnoremap <CR> :noh<CR><CR> 因此,在搜索后,只需在命令模式下再次按回车键,突出显示就会消失。 回答5 来自http://twitter.com/jonbho/status
    • 如何使Vim从系统剪贴板粘贴(并复制到系统剪贴板)?(How to make vim paste from (and copy to) system's clipboard?)
      问题 与其他编辑器不同,vim将复制的文本存储在其自己的剪贴板中。 因此,对我来说很难从网页中复制一些文本并将其粘贴到当前的工作文件中。 碰巧我必须打开gedit或手动键入它。 我可以在系统剪贴板中粘贴vim吗? 回答1 "*和"+寄存器用于系统的剪贴板( :help registers )。 根据您的系统,他们可能会做不同的事情。 例如,在不使用X11的系统(例如OSX或Windows)上, "*寄存器用于读写系统剪贴板。在X11系统上,两个寄存器都可以使用。有关更多详细信息,请参见:help x11-selection ,但基本上, "*类似于X11的_PRIMARY_选择(通常使用鼠标复制您选择的内容并用鼠标中键粘贴),而"+类似于X11的_CLIPBOARD_选择(这是剪贴板固有的)。 如果这一切都困扰您,请尝试使用"*yy或"+yy将行复制到系统剪贴板中。 假定您具有适当的编译选项,则一个或另一个应起作用。 您可能希望将其重新映射为更方便的方式。 例如,您可以在~/.vimrc放置vnoremap <Cc> "*y ,以便您可以直观地选择并按Ctrl + c来拉到系统的剪贴板。 请注意,如果:echo has('clipboard')返回0,则无法从系统剪贴板进行复制/粘贴。 在这种情况下,vim不会使用+clipboard功能进行编译,因此您必须安装其他版本或重新编译它
    • h:outputText不会将\ r \ n字符分成新行(h:outputText does not break \r\n characters into new lines)
      问题 我有一个String变量,其中包含回车符和换行\r\n 。 text = "Text1\r\nText2\r\nText3"; 我正在使用<h:outputtext>呈现它。 <h:outputText value="#{bean.text}" /> 但是它无法识别换行符,并在webbrowser中显示如下。 文字1文字2文字3 <h:outputText>为什么不将\n换成新行? 我应该怎么办? 我必须用<br />替换\n吗? 回答1 HTML中的换行符由<br />元素表示,而不由\n字符表示。 甚至,通过右键单击打开平均HTML源代码,在浏览器中查看源代码,您将在所有位置“看到” \n 。 但是,它们在最终的HTML演示文稿中并未这样显示。 只有<br />会。 因此,是的,您需要用<br />替换它们。 您可以为此使用JSTL函数: <... xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"> <h:outputText value="#{fn:replace(bean.text,'\n','<br/>')}" escape="false" /> 注意:当使用Apache EL而不是Oracle EL时,请像\\n一样两次转义反斜杠。 <h:outputText value="#{fn:replace(bean
    • 如何修剪前导和尾随空白?(How can I trim leading and trailing white space?)
      问题 我在data.frame中的前导空格和尾随空格有一些麻烦。 例如,我想根据特定条件查看data.frame中的特定row : > myDummy[myDummy$country == c("Austria"),c(1,2,3:7,19)] [1] codeHelper country dummyLI dummyLMI dummyUMI [6] dummyHInonOECD dummyHIOECD dummyOECD <0 rows> (or 0-length row.names) 我想知道为什么我没有得到预期的输出,因为data.frame明显存在奥地利这个国家。 在查看了我的代码历史记录并尝试找出出了什么问题之后,我尝试了: > myDummy[myDummy$country == c("Austria "),c(1,2,3:7,19)] codeHelper country dummyLI dummyLMI dummyUMI dummyHInonOECD dummyHIOECD 18 AUT Austria 0 0 0 0 1 dummyOECD 18 1 我在命令中所做的更改只是在奥地利之后增加了一个空白区域。 显然还会出现其他令人烦恼的问题。 例如,当我想基于“国家/地区”列合并两个框架时。 一个data.frame使用"Austria "而另一帧使用"Austria
    • 如何从Bash变量中修剪空格?(How to trim whitespace from a Bash variable?)
      问题 我有一个带有以下代码的shell脚本: var=`hg st -R "$path"` if [ -n "$var" ]; then echo $var fi 但是条件代码总是执行,因为hg st总是打印至少一个换行符。 有没有一种简单的方法可以从$var删除空格(如PHP中的trim() )? 或者 有没有解决此问题的标准方法? 我可以使用sed或AWK,但我想认为有一个更优雅的解决方案。 回答1 一个简单的答案是: echo " lol " | xargs Xargs将为您进行修剪。 这是一个命令/程序,没有参数,返回修整后的字符串,就这么简单! 注意:这不会删除所有内部空间,因此"foo bar"保持不变; 它不会变成"foobar" 。 但是,多个空格将被压缩为单个空格,因此"foo bar"将变为"foo bar" 。 此外,它不会删除行尾字符。 回答2 让我们定义一个包含前导,尾随和中间空格的变量: FOO=' test test test ' echo -e "FOO='${FOO}'" # > FOO=' test test test ' echo -e "length(FOO)==${#FOO}" # > length(FOO)==16 如何删除所有空格(在tr以[:space:]表示): FOO=' test test test ' FOO_NO
    • 有没有一种简单的方法来删除字符串中的多个空格?(Is there a simple way to remove multiple spaces in a string?)
      问题 假设这个字符串: The fox jumped over the log. 转变为: The fox jumped over the log. 什么是最简单的方法(1-2行),而无需拆分并进入列表? 回答1 >>> import re >>> re.sub(' +', ' ', 'The quick brown fox') 'The quick brown fox' 回答2 foo是您的字符串: " ".join(foo.split()) 请注意,尽管这样做会删除“所有空白字符(空格,制表符,换行符,返回符,换页符)”(由于hhsaffar,请参见注释)。 即, "this is \ta test\n"将有效地以"this is a test" 。 回答3 import re s = "The fox jumped over the log." re.sub("\s\s+" , " ", s) 或者 re.sub("\s\s+", " ", s) 正如使用者Martin Thoma在评论中提到的那样,因为逗号前的空格在PEP 8中被列为“宠儿” 。 回答4 将正则表达式与“ \ s”一起使用并执行简单的string.split()也会删除其他空格,例如换行符,回车符,制表符。 除非需要这样做,否则仅给出多个空格,我将介绍这些示例。 我使用11个段落,1000个单词
    • IndentationError:unindent与任何外部缩进级别都不匹配(IndentationError: unindent does not match any outer indentation level)
      问题 当我编译下面的Python代码时,我得到 IndentationError:unindent与任何外部缩进级别都不匹配 import sys def Factorial(n): # Return factorial result = 1 for i in range (1,n): result = result * i print "factorial is ",result return result 为什么? 回答1 其他海报可能是正确的...选项卡中可能混有空格。 尝试进行搜索和替换,以所有空格替换几个空格。 试试这个: import sys def Factorial(n): # return factorial result = 1 for i in range (1,n): result = result * i print "factorial is ",result return result print Factorial(10) 回答2 重要说明:空格是首选方法-请参阅PEP008缩进和制表符或空格? (感谢@Siha。) 对于Sublime Text用户: 将Sublime Text设置为使用制表符进行缩进: View -> Indentation -> Convert Indentation to Tabs 还要取消选中上述同一子菜单中的“