我在启动 vim 时遇到了问题。每当我运行 时vim somefile
,它都会像我c
在启动后立即按下 一样启动。因此,如果我尝试使用 立即跳转到文件末尾G
,它反而变化到文件末尾,即从启动行到文件末尾的所有行都消失了,我处于插入模式。我使用的是终端 vim 而不是 MacVim,如果相关的话,我的 shell 是 zsh。我在 shell 和 vim 中都使用了 16 进制的明天 256 色方案 — shell 为深色,vim 为浅色。我使用的是 Janus 配置,自定义程度非常低。
以下是我为寻找问题所尝试做的事情:
- 注释掉
.vimrc.after
文件中除配色方案和字体声明之外的所有内容。没有变化。 - 在 iTerm2 和 vim 中禁用我的 base16 配色方案命令。我以为可能是 256 色 shell 脚本导致了问题,但结果却不是这样。
- 删除了 Janus (Emmet) 中的一个自定义插件。没有区别。
- 将 colorscheme 更改为非 base16 方案。没有区别。
我发现的唯一真正区别是 iTerm2 和 Terminal.app 之间的区别。在 Terminal.app 中,无论我在启动后立即输入什么动作命令,更改命令似乎都限制为一行。因此,如果我G
在打开文件后输入,它不会删除下面的所有行。它只是删除它所在的行并进入插入模式。
另外两个证据:1) 如果我使用 打开目录vim path/to/directory
,Terminal.app 和 iTerm2 的行为会略有不同。在 iTerm2 中,没有明显的问题。在 Terminal.app 中,我E481: No range allowed
在窗口底部收到消息。2) 如果我使用 MacVim,据我所知,这种行为不存在。这让我认为这与我的 shell 环境有关。Terminal.app 和 iTerm2 的终端报告都设置为 xterm-256color。
情况就是这样。下面是我相关的 vim 文件的内容。虽然解决问题会有所帮助,但我更感兴趣的是在这里学习钓鱼。我过去对 vim 感到沮丧的部分原因是它有时会做一些我不理解的事情。有时是通过打字错误或手指粗略的命令或其他什么,但无论如何,我不知道什么我这样做是为了避免这种奇怪的行为,以便将来可以避免这种情况。我现在也处于同样的境地。我不想只知道如何修复它,而是想知道出了什么问题,以及某种可以追踪问题的方法,以便我可以在未来的问题中应用。提前谢谢!
.vimrc.before
set nocompatible
let mapleader=","
set splitbelow
set splitright
call janus#disable_plugin('nerdtree')
if has("gui_running")
let g:loaded_netrw = 1 " Disable netrw
let g:loaded_netrwPlugin = 1 " Disable netrw
endif
.vimrc
""
"" Janus setup
""
" Define paths
"let g:janus_path = escape(fnamemodify(resolve(expand("<sfile>:p" . "janus" . "janus")), ":h"), ' ')
"let g:janus_vim_path = escape(fnamemodify(resolve(expand("<sfile>:p" . "janus" . "janus" . "vim")), ":h"), ' ')"
let g:home_path = expand("~")
let g:vim_path = g:home_path . "/.dotfiles/vim"
let g:janus_path = g:vim_path . "/janus/janus"
let g:janus_vim_path = g:janus_path . "/vim"
let g:janus_custom_path = g:vim_path . "customization"
if filereadable(g:janus_vim_path . '/core/before/plugin/janus.vim')
" Source janus's core
exe 'source ' . g:janus_vim_path . '/core/before/plugin/janus.vim'
" You should note that groups will be processed by Pathogen in reverse
" order they were added.
call janus#add_group("tools")
call janus#add_group("langs")
call janus#add_group("colors")
""
"" Customisations
""
if filereadable(expand("~/.vimrc.before"))
source ~/.vimrc.before
endif
" Disable plugins prior to loading pathogen
exe 'source ' . g:janus_vim_path . '/core/plugins.vim'
""
"" Pathogen setup
""
" Load all groups, custom dir, and janus core
call janus#load_pathogen()
" .vimrc.after is loaded after the plugins have loaded
endif
.vimrc.after
let base16colorspace=256 " Access colors present in 256 colorspace
set background=light
colorscheme base16-tomorrow
set guifont=Panic\ Sans:h13
"set tabstop=4
"set shiftwidth=4
"set softtabstop=4
"set expandtab
"let g:user_emmet_install_global = 0
"autocmd FileType html,css,eruby,eruby-rails EmmetInstall
" window
nmap <leader>sw<left> :topleft vnew<CR>
nmap <leader>sw<right> :botright vnew<CR>
nmap <leader>sw<up> :topleft new<CR>
nmap <leader>sw<down> :botright new<CR>
" buffer
nmap <leader>s<left> :leftabove vnew<CR>
nmap <leader>s<right> :rightbelow vnew<CR>
nmap <leader>s<up> :leftabove new<CR>
nmap <leader>s<down> :rightbelow new<CR>
" clear search highlight
nnoremap <esc> :noh<return><esc>
" exit insert mode when beginning text movements
:imap jj <Esc>
:imap jk <Esc>
:imap kk <Esc>
:imap kj <Esc>
set clipboard=unnamed
"Helpful stuff from Steve Losh
set list
set listchars=tab:▸\ ,eol:¬ "Change the invisible character display characters.
set wrap
set textwidth=79
set formatoptions=qrn1
set colorcolumn=85
nnoremap / /\v
vnoremap / /\v
set ignorecase
set smartcase
set gdefault
set incsearch
set showmatch
set hlsearch
"nnoremap <leader><space> :noh<cr>
nnoremap <tab> %
vnoremap <tab> %
set encoding=utf-8
set scrolloff=3
set autoindent
set showmode
set showcmd
set hidden
set wildmenu
set wildmode=list:longest
set visualbell
set cursorline
set ttyfast
set ruler
set backspace=indent,eol,start
set laststatus=2
set relativenumber
set undofile
nnoremap <up> <nop>
nnoremap <down> <nop>
nnoremap <left> <nop>
nnoremap <right> <nop>
inoremap <up> <nop>
inoremap <down> <nop>
inoremap <left> <nop>
inoremap <right> <nop>
nnoremap j gj
nnoremap k gk
inoremap <F1> <ESC>
nnoremap <F1> <ESC>
vnoremap <F1> <ESC>
" Save on focus lost
au FocusLost * :wa
.gvimrc.before
call janus#disable_plugin('NERDtree')
.gvimrc.after
" Override existing colorscheme with version found in
" ~/.janus/<colorscheme>/colors/<colorscheme>.vim
if exists("g:colors_name")
let color_override = expand('~/.janus/' . g:colors_name . '/colors/' . g:colors_name . '.vim')
if filereadable(color_override)
exe 'source ' . color_override
endif
endif
set background=light
colorscheme base16-tomorrow
set guifont=Panic\ Sans:h13
答案1
先前的这个问题似乎解决了我的问题。Vim 在启动时出现意外的按键,这可能是什么原因造成的?我确实看到了包含导致问题的:echo v:termresponse
违规字符,并且设置确实神奇地解决了问题,但就像那里的 OP 一样,我不知道c
set t_RV= ttymouse=xterm2
为什么这就是问题所在,解答者如何知道要检查:echo v:termresponse
,或者set t_RV= ttymouse=xterm2
解答者如何将其输入到 vim 配置文件中来解决它。