【问题标题】:VIM: Backspace deletes in normal mode, but does nothing in insert mode.VIM:退格键在正常模式下删除,但在插入模式下不执行任何操作。
【发布时间】:2018-04-26 01:25:43
【问题描述】:

初步信息:

  • 问题在于终端 Vim,而不是 gVim
  • 我使用 CMDER(基于 conemu)作为终端仿真器
  • 我使用的是 Windows 10

详细说明:

当我处于插入模式时,我可以正常输入文本,但退格键不起作用。在正常模式下,退格键删除文本。这与我今天早些时候的行为完全相反。我在网上阅读了许多其他描述 Vim 非正统退格行为的帖子,但建议的配置设置(即 bs=2 或 bs=indent,eol,start)什么也没做。

更不寻常的是 gVim 的行为“正常”,即:退格键在正常模式下将光标向左移动,并在插入模式下删除文本。

我希望退格键在插入模式下删除文本(就像大多数其他程序一样)并在正常模式下导航/禁用。我怎样才能恢复这种行为?

下面是我的 _vimrc 的副本:(我会把它放在 github 上,但我的 git 目前搞砸了,我还没有修复它。)此外,默认情况下,_vimrc 内部还有一个函数.我不知道它做了什么,但为了节省空间而省略了它。如果你想看看我是否可以在回复中发布。

source $VIMRUNTIME/vimrc_example.vim

source $VIMRUNTIME/mswin.vim

behave mswin

" Pathogen - Plugin manager
execute pathogen#infect()

set nocompatible " Turns off Vi compatability gubbinz

" Color Theme
if !has("gui_running") " Allows some 256 color themes to work in Terminal
    set term=xterm
    set t_Co=256
    let &t_AB="\e[48;5;%dm"
    let &t_AF="\e[38;5;%dm"
    colorscheme gruvbox
endif

let g:gruvbox_dark_contrast = 'hard' " Both of these are just visual gruvbox tweaks

let g:gruvbox_light_contrast = 'hard'
set guifont=Consolas:h10:cANSI:qDRAFT " Changes font
set bs=indent,eol,start  " Makes backspace be normal
set filetype=ON     " Has vim check for filetype
set showcmd         " Displays incomplete commands
set ruler           " Shows position of cursor in document
set syntax=ON       " Turns on syntax highlighting
set number          " Show line numbers
set linebreak       " Break lines at word (requires Wrap lines)
set showbreak=+++   " Wrap-broken line prefix
set textwidth=100   " Line wrap (number of cols)
set showmatch       " Highlight matching brace

set hlsearch        " Highlight all search results
set smartcase       " Enable smart-case search
set incsearch       " Searches for strings incrementally

set autoindent      " Auto-indent new lines
set shiftwidth=4    " Number of auto-indent spaces
set smartindent     " Enable smart-indent
set smarttab        " Enable smart-tabs
set softtabstop=4   " Number of spaces per Tab
set undolevels=1000     " Number of undo levels
set backspace=indent,eol,start  " Backspace behaviour
set go=egrLTm           " Changes flags that specify how the GUI loads

【问题讨论】:

  • 你试过没有你的配置吗,$ vim -Nu NONE
  • @romainl 你能澄清一下实际上需要在命令中添加什么吗? Vim 给了我无效的命令错误。
  • 没什么。只需使用该命令在没有配置的情况下启动 Vim 即可查看问题是 Vim 问题还是配置问题。

标签: vim


【解决方案1】:

很可能,您的插入模式退格键被映射为什么都不做(即<nop>)。通过键入 :verbose imap <bs> 来验证这一点。这将显示退格键是否已映射以及映射的设置位置。

我希望退格键在插入模式下删除文本(就像大多数其他程序一样)并在正常模式下导航/禁用。我怎样才能恢复这种行为?

你可以这样做:

iunmap <bs>
nnoremap <bs> <nop>

第一行在插入模式下取消映射&lt;bs&gt;,因此&lt;bs&gt; 将恢复其默认功能。第二行在正常模式下映射&lt;bs&gt; 什么都不做。

【讨论】:

  • 感谢您的回复!命令:verbose imap &lt;bs&gt; 产生:'E31:没有这样的映射',当我尝试iunmap &lt;bs&gt; 时,它给了我相同的答案。有什么建议吗?
  • 按照上面评论中的建议,从你的终端使用命令vim -Nu NONE 打开 Vim。问题是否仍然存在?
  • 当我在没有配置的情况下启动 vim 时,它会正常运行,只要您处于编辑模式(例如,您不能编辑旧文本),退格就可以工作,但这只是 vim 的正常功能。所以我想问题是,我的配置中的什么可能导致它?按顺序禁用每个设置会是一个很好的测试吗?
  • 这可能有效:创建一个高详细级别的日志文件。该文件将包含加载插件、设置选项等信息(请参阅:help verbose)。要创建日志文件,请在终端中输入命令 vi -V20vimlog -c q。这应该在您的当前目录中创建一个名为vimlog 的日志文件。在 Vim 中打开文件并查找可能导致问题的任何内容。例如搜索 &lt;bs&gt;backspace 等关键字。
  • 好的,我创建了日志文件,并注意到我的配置的前两行调用其他配置文件先加载我自己的。所以我注释掉了这些行,现在退格在编辑模式下用作向右删除。这是一个改进!有趣的是,它也破坏了语法高亮,但重新启用 vimrc_example 解决了这个问题。我会仔细研究那个文件,看看它在做什么。坦率地说,我想我会在一切正常时使用向右删除,以免再次破坏某些东西。非常感谢你的帮助!我永远不会在其他地方找到这个。
猜你喜欢
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2018-12-30
  • 2014-12-09
  • 1970-01-01
  • 2012-02-03
  • 2017-03-14
相关资源
最近更新 更多