<Esc>를 다시 매핑하면 커서가 이동하는 이유는 무엇입니까?


9

에서 .vimrc:

inoremap ii <esc>                               " ii to go back into command mode

문제는 ii커서가 35 열 오른쪽으로 이동한다는 것입니다. 영향을주는 유일한 다른 줄 Esc:

nnoremap <esc><esc> :noh<return><esc>

나는 그것을 주석 처리하려고 시도했지만 도움이되지 않습니다.


전체.vimrc :

set nocompatible
filetype off


" Vundle ---------------------------------------------------------------------
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
Plugin 'bling/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'scrooloose/syntastic'
Plugin 'freitass/todo.txt-vim'
Plugin 'plasticboy/vim-markdown'
Plugin 'tpope/vim-fugitive'                     " :GitCommands
Plugin 'tpope/vim-git'                          " allows to see branch in airline
Plugin 'airblade/vim-gitgutter'                 " git status in SL area
Plugin 'ctrlpvim/ctrlp.vim'                     " TODO: learn more about this
Plugin 'Shougo/neocomplete.vim'                 " TAB completion
" Plugin 'tmhedberg/SimpylFold'                 " should we add FastFold?
Plugin 'spf13/vim-autoclose'                    " autoclose brackets(properly)
Plugin 'godlygeek/tabular'                      " V -> : -> /SYMBOL_TO_LINE-UP
Plugin 'terryma/vim-multiple-cursors'           " steep learning curve
Plugin 'Yggdroot/indentLine'                    " shows | intendation
Plugin 'mhinz/vim-startify'                     " start screen
Plugin 'hashivim/vim-vagrant'
Plugin 'pearofducks/ansible-vim'
Plugin 'whatyouhide/vim-gotham'
Plugin 'ryanoasis/vim-devicons'                 " glyph icons everywhere
call vundle#end()


" System ---------------------------------------------------------------------
set lazyredraw                                  " do we need this?
set ttyfast                                     " theoretically make things faster
set mouse=a                                     " enable mouse
set guicursor=a:blinkon0                        " don't blink with the cursor
set termencoding=utf-8                          " terminal is UTF-8
set encoding=utf8                               " ...as well as the editor
set fileformat=unix                             " *nix format
set clipboard=unnamed                           " Fix clipboard in *nix
set wildmenu
set wildmode=longest:full,full
set wildignore=*.o,*.pyc,*.DS_Store
set magic                                       " needed for regexp
set hidden                                      " allow switching buffers w/o saving
set nojoinspaces                                " don't join spaces on paste
set formatoptions-=r formatoptions-=c formatoptions-=o " don't autoextend comments
set lines=40 columns=90                         " default size for GUI
set gdefault                                    " replace all without /g
set virtualedit=all                             " keep cursor horizontal pos. when scrolling

set backup                                      " backups ON
set undofile                                    " persistent undo
set backupdir=~/.vim/backup
set directory=~/.vim/tmp
set undolevels=1000                             " max number of undos
set undoreload=10000                            " max lines to to save for undo
set history=1000                                " 1000 of history (what?)

set incsearch                                   " incremental search
set smartcase                                   " ... and case sensitive if Uppercase is present

set expandtab                                   " spaces instead of tabs
set smarttab                                    " smart tabs/intends
set tabstop=4                                   " TAB = 4 spaces
set softtabstop=4
set smartindent
set autoindent
set shiftwidth=4
set shiftround                                  " round to 4

let NERDSpaceDelims=1                           " add space before comment
let NERDTreeMapOpenInTab='\r'                   " open files in new tab
let g:vim_markdown_folding_disabled=1           " don't fold *.md

let g:neocomplete#enable_at_startup = 1         " NeoComplete
let g:neocomplete#enable_auto_select = 1
let g:neocomplete#enable_smart_case = 1
let g:neocomplete#min_keyword_length = 2        " min symbols before autocomplete


" Visuals --------------------------------------------------------------------
filetype plugin indent on                       " enable filetype plugins
syntax enable                                   " enable syntax highlighting
let python_highlight_all=1                      " full python highlighting
colorscheme gotham256                           " GUI colours
let g:airline_theme = "gotham256"               " airline theme
if has("gui_running")
    set cul
endif

set title                                       " set terminal title
set t_Co=256                                    " 256 colors terminal
set guifont=Meslo\ LG\ S\ Regular\ for\ Powerline\ Nerd\ Font\ Complete\ Windows\ Compatible:h12
set guioptions=L                                " disable right scrlbar
set guioptions=R                                " disable left scrlbar
set number                                      " show line numbers
set nowrap                                      " don't wrap long lines
set fillchars+=vert:\?                          " vertical unicode split
set shortmess+=I                                " remove startup message

set splitbelow                                  " Natural splits
set splitright

set hlsearch                                    " highlight search results
set showmatch                                   " show matching brackets

set noerrorbells                                " disable bells
set novisualbell
set vb t_vb=

set laststatus=2                                " always show airline
let g:airline_powerline_fonts=1                 " use glyph fonts
let g:airline#extensions#tabline#enabled=1      " enable tabline (top)
let g:airline#extensions#tabline#fnamemod=':t'  " filename only

set completeopt-=preview                        " don't show doc. window by default
let g:SimplylFold_docstring_preview=1           " keep docstring unfolded.

let g:gitgutter_sign_added = '?'                " Gitgutter
let g:gitgutter_sign_modified = '•'
let g:gitgutter_sign_removed = '?'
let g:indentLine_char = '¦'                     " intendation vertical lines


" Hotkeys --------------------------------------------------------------------
nnoremap <F1> <nop>                             " F1 does noothing
map <F2> :NERDTreeToggle<CR>                    " F2 to open NerdTree
set pastetoggle=<F3>                            " F3 to switch in paste mode
map <F4> :mksession! ~/.vim/vim_session<CR>     " F4 to write current session
map <F5> :source ~/.vim/vim_session<CR>         " F5 to load prev. session

inoremap ii <esc>                               " ii to go back into command mode
let mapleader = "\<Space>"                      " remap leader key from '\' to Space
map <leader>cd :cd %:p:h<cr>:pwd<cr>            " CWD to the dir of the open buffer
nnoremap <esc><esc> :noh<return><esc>           " 2xESC clears search highlights

nnoremap <C-J> <C-W><C-J>                       " switch splits with CTRL+hjkl
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

nmap <leader>l :bn<CR>                          " next buffer by Space+l
nmap <leader>h :bp<CR>                          " previous buffer by Space+h
nmap <leader>q :bp <BAR> bd #<CR>               " close buffer by Space+q

vnoremap < <gv                                  " leave txt selected after <>
vnoremap > >gv

set t_ku=OA                                   " fix arrow keys
set t_kd=OB
set t_kr=OC
set t_kl=OD

nmap <leader>f1 :set foldlevel=0<CR>            " change folding levels
nmap <leader>f2 :set foldlevel=1<CR>
nmap <leader>f3 :set foldlevel=2<CR>
nmap <leader>f4 :set foldlevel=3<CR>

nnoremap <silent> <leader>gs :Gstatus<CR>       " GIT shortcuts
nnoremap <silent> <leader>gd :Gdiff<CR>
nnoremap <silent> <leader>gc :Gcommit<CR>
nnoremap <silent> <leader>gb :Gblame<CR>
nnoremap <silent> <leader>gl :Glog<CR>
nnoremap <silent> <leader>gp :Git push<CR>
nnoremap <silent> <leader>gr :Gread<CR>
nnoremap <silent> <leader>gw :Gwrite<CR>
nnoremap <silent> <leader>ge :Gedit<CR>
nnoremap <silent> <leader>ga :Git add %:p<CR>

set backspace=eol,start,indent                  " esoteric backspace fix
set whichwrap+=<,>                              " move to another line with <- ->

if bufwinnr(1)                                  " resize splits with +-
  map + <C-W>+
  map - <C-W>-
endif

" NeoComplete
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
    " return neocomplete#close_popup() . "\<CR>"
    " For no inserting <CR> key.
    return pumvisible() ? neocomplete#close_popup() : "\<CR>"
endfunction

" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"


" Macros ---------------------------------------------------------------------

" Emulate any other editor with tabs
try
 set switchbuf=useopen,usetab,newtab
catch
endtry

" Close vim if NerdTree is the only buffer left
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif

" Return to last edit position when opening files
autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

" Python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

" Enable heavy omni completion.
if !exists('g:neocomplete#sources#omni#input_patterns')
  let g:neocomplete#sources#omni#input_patterns = {}
endif

" format JSON code
com! FormatJSON %!python -m json.tool

" BG fix for tmux
set t_ut=

1
아마도 해결책이 아니라 매핑에서 예기치 않은 부작용을 피하기 위해 사용해야합니다 inoremap ii <Esc>. 나는 그것이 당신의 문제를 해결할 것이라고 생각하지 않지만 여전히 모범 사례입니다. 또한 당신은 당신의 전체를 게시 할 수 있습니다 .vimrc: 그것은 우리가 당신을 도울 수 있습니다 ;-)
statox

@statox inoremap와 같은 효과로 변경되었습니다 . vimrc에 대한 링크를 추가했습니다. 감사합니다 :]
asv

답변:


20

문제는 줄 끝에 공백으로 구분하여 주석을 작성하는 것입니다. Vim은 이러한 공백을 명령 및 매핑의 일부로 해석합니다.

교체하는 경우 :

inoremap ii <esc>                               " ii to go back into command mode

으로

" ii to go back into command mode
inoremap ii <Esc>

당신은 당신의 문제를 해결할 것입니다.

일반적으로 줄 끝에서 주석을 달지 마십시오..vimrc


그리고 보너스로 여기 .vimrc에 올바른 형식으로 변환하는 방법이 있습니다 .

편집 이 명령을 사용하십시오. (원래와 비교하여 줄 바꿈 문자 \r를 직접 복사 할 수 ^M있으므로을 사용할 필요가 없습니다 . 감사합니다 @Sato!)

 :%s/\(^.*\)\s\+\(".*\)/\2\r\1

원래 명령

 :%s/\(^.*\)\s\+\(".*\)/\2^M\1

( 실제 줄 바꾸기 문자 를 삽입하는 데 ^M올바르게 사용 하려면 Ctrl-vEnter)

이 명령은 줄 끝에 주석이 포함 된 줄의 시작 부분을 캡처하고 주석을 포함하는 두 줄로 줄을 바꾼 다음 명령을 입력합니다.

(명령이 함수와 엉망인 것처럼 보이 my_cr_function므로 일부 범위로 .vimrc대체 %하고 .vimrc단계별로 변경하는 데 많은 문제가 발생하지 않는지 확인하고 싶을 수도 있습니다 )


@Sato는 또한 주석과 여러 줄의 작동 방식에 대한 이 링크 를 제안 하여 읽을 가치가 있습니다.


2
@ fruglemonkey 당신 말이 맞지만 나는 그것을 추천하는 것이 좋은 습관이라고 생각하지 않습니다. 막대를 잊고 문제의 원인을 파악하기 위해 많은 시간을 소비하는 것은 쉽습니다. 나는 별도의 줄에 주석을
달면

3
가치있는 것에 대해 , 이 포스트 는 VimL의 주석으로 무슨 일이 일어나고 있는지 정확하게 설명합니다.
Sato Katsura

4
또한 ^M교체 문자열을로 대체 할 수도 있습니다 \r.
Sato Katsura

4
슬프게도 \r모든 상황에서 작동하지는 않습니다 \n. 검색 패턴 에 사용해야 합니다. 그러나 여기서 작동합니다.
Sato Katsura

1
Sato의 링크를 읽으면 "일부 명령 정의는 해당 컨텍스트에서 주석을 허용하므로 줄 바꿈이나 막대처럼 set ai " Set &autoindent취급 "하지만 작동하지는 않습니다 :let."... 를 참조하십시오 . 경우에 따라 주석을 추가 할 수 있습니다 라인의 끝이지만 나는 .vimrc그들을 사용하는 것을 본 적이 없다고 생각 하므로 사용하지 않는 것이 좋습니다.
statox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.