试图让一些映射在vim中工作

时间:2016-07-21 10:33:10

标签: vim

我想要使用一些映射,所以我可以像使用常规文本编辑器一样使用VIM this answer这似乎适用于大多数人,大多数人不包括我。

这个想法是使用shift +箭头键从正常模式中进行选择,但它只会导致我的光标陷入困境而不做任何其他事情。

此外,我试图让multi-cursors在vim中工作,但是当我使用我的键映射时,我收到此错误

E78: Unknown mark

以下是我的key-mappings

" Buffer switching
map <leader>p :bp<CR> " \p previous buffer
map <leader>n :bn<CR> " \n next buffer
map <leader>d :bd<CR> " \d delete buffer

" Increment numbers
nnoremap <A-a> <C-a>
nnoremap <A-x> <C-x>

map <Leader>c :call vroom#RunTestFile()<CR>
map <Leader>s :call vroom#RunNearestTest()<CR>
map <leader>t :A<CR> " \t to jump to test file
map <leader>r :r<cr> " \t to jump to related file
map <leader>E :Explore .<cr> " \E to open file explorer in root
map <leader>e :Explore<cr> " \e to open file explorer in current dir

"nerd tree mapings
map <C-n> <plug>NERDTreeTabsToggle<CR>

"shit plus arrow for selectio mode
" shift+arrow selection
nmap <S-Up> v<Up>
nmap <S-Down> v<Down>
nmap <S-Left> v<Left>
nmap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <Right>
imap <S-Up> <Esc>v<Up>
imap <S-Down> <Esc>v<Down>
imap <S-Left> <Esc>v<Left>
imap <S-Right> <Esc>v<Right>

"copy and pasting
vmap <C-c> y<Esc>i
vmap <C-x> d<Esc>i
map <C-v> pi
imap <C-v> <Esc>pi
imap <C-z> <Esc>ui

"multi-cursor mappings"
let g:multi_cursor_next_key='<leader>d'
let g:multi_cursor_prev_key='<leader>s'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'

" Removing escape
ino jj <esc>
cno jj <c-c>
vno v <esc>

" Remove highlights with leader + enter
nmap <Leader><CR> :nohlsearch<cr>

" Ruby hash syntax conversion
nnoremap <F12> :%s/:\([^ ]*\)\(\s*\)=>/\1:/g<return>

我还想在基本的文字编辑之外添加我对vim非常新的内容,所以我不会怀疑我做错了什么,对某些方面一无所知等等,所以请在回答时考虑到这一点。

shift+left会导致D输出到终端。

shift+right会导致C输出到终端。

1 个答案:

答案 0 :(得分:0)

我找到答案(最终)并解决了另一个问题。

解决方案在于answer关于unixstack问题。

首先,您需要告诉vim终端使用的转义密钥代码。 我做了这个here

function Allmap(mapping)
  execute 'map' a:mapping
  execute 'map!' a:mapping
endfunction

call Allmap('   <ESC>[1;2       <S>')
call Allmap('   <ESC>[1;2A      <S-Up>')
call Allmap('   <ESC>[1;2B      <S-Down>')
call Allmap('   <ESC>[1;2C      <S-Right>')
call Allmap('   <ESC>[1;2D      <S-Left>')
call Allmap('   <ESC>[1;2d      <S-d>')
call Allmap('   <ESC>[1;2s      <S-s>')

然后我只是将我想要的命令附加到声明的键映射:

map <S-Up> v<Up>
nmap <S-Down> v<Down>
nmap <S-Left> v<Left>
nmap <S-Right> v<Right>
vmap <S-Up> <Up>
vmap <S-Down> <Down>
vmap <S-Left> <Left>
vmap <S-Right> <Right>
imap <S-Up> <Esc>v<Up>
imap <S-Down> <Esc>v<Down>
imap <S-Left> <Esc>v<Left>
imap <S-Right> <Esc>v<Right>


"multi-cursor mappings"
let g:multi_cursor_next_key='<S-d>'
let g:multi_cursor_prev_key='<S-s>'