Преглед изворни кода

Refactor screen movement mapping function

Why do it with 1 function when it can be done with 2? Reduce
repetitiveness in mappings with `execute`!

Also:
 - Change all instances of `exec` with `execute`. Possibly should
   standardize either using short forms or long forms.
Weiyi Lou пре 10 година
родитељ
комит
911c3b7b8e

+ 1 - 1
vim/settings/colorscheme-statusline.vim

@@ -33,7 +33,7 @@ endfunction
 function! SetTheme(name)
   " Airline functions are not available at vim start.
   if exists(':AirlineTheme')
-    exec 'AirlineTheme' a:name
+    execute 'AirlineTheme' a:name
   else
     let g:airline_theme = a:name
   endif

+ 1 - 1
vim/settings/folders.vim

@@ -30,7 +30,7 @@ function! InitVimFolders()
     " Use the folders.
     if isdirectory(path)
       let path = substitute(path, " ", "\\\\ ", "g")
-      exec "set " . setting . "=" . path
+      execute "set " . setting . "=" . path
     else
       echo "Warning! Could not create folder: " . path
       echo "Try `mkdir -p " . path . "`"

+ 2 - 2
vim/settings/folding.vim

@@ -1,5 +1,5 @@
 " Folding - Modeline and Notes {{{
-" vim: set sw=2 ts=2 sts=2 et tw=78 foldmarker={{{,}}} foldlevel=0 foldmethod=marker:
+" vim: set sw=2 ts=2 sts=2 et tw=78 foldmarker={{{,}}} foldlevel=1 foldmethod=marker:
 "
 "   cinaeco/dotfiles Folding Settings
 "
@@ -77,7 +77,7 @@ if has('folding')
     " Set fold fillchar {{{
     "  - This complicated line is to ensure we replace the fold fillchar only.
     let &l:fillchars = substitute(&l:fillchars,',\?fold:.','','gi')
-    exec 'setlocal fillchars+=fold:' . foldChar
+    execute 'setlocal fillchars+=fold:' . foldChar
     " }}}
 
     " Handle diff foldmethod {{{

+ 4 - 4
vim/settings/quickfix.vim

@@ -53,15 +53,15 @@ if has("autocmd")
 
   " <Tab> and <Bslash> map adding helper. {{{
   function! MapQfPrevNext()
-    exec "nmap <silent> <tab> :cprev<CR>"
-    exec "nmap <silent> <bslash> :cnext<CR>"
+    execute "nmap <silent> <tab> :cprev<CR>"
+    execute "nmap <silent> <bslash> :cnext<CR>"
   endfunction
   " }}}
 
   " <Tab> and <Bslash> map removal helper. {{{
   function! UnmapQfPrefNext()
-    exec "nunmap <tab>"
-    exec "nunmap <bslash>"
+    execute "nunmap <tab>"
+    execute "nunmap <bslash>"
   endfunction
   " }}}
 

+ 17 - 20
vim/settings/screenmovement.vim

@@ -19,27 +19,24 @@ map zh zH
 map H ^
 map L $
 
-" Make movements operate on 1 screen line in wrap mode
-nnoremap <silent> <expr> j ScreenMovement("j")
-nnoremap <silent> <expr> k ScreenMovement("k")
-nnoremap <silent> <expr> 0 ScreenMovement("0")
-nnoremap <silent> <expr> ^ ScreenMovement("^")
-nnoremap <silent> <expr> $ ScreenMovement("$")
-onoremap <silent> <expr> j ScreenMovement("j")
-onoremap <silent> <expr> k ScreenMovement("k")
-onoremap <silent> <expr> 0 ScreenMovement("0")
-onoremap <silent> <expr> ^ ScreenMovement("^")
-onoremap <silent> <expr> $ ScreenMovement("$")
-xnoremap <silent> <expr> j ScreenMovement("j")
-xnoremap <silent> <expr> k ScreenMovement("k")
-xnoremap <silent> <expr> 0 ScreenMovement("0")
-xnoremap <silent> <expr> ^ ScreenMovement("^")
-xnoremap <silent> <expr> $ ScreenMovement("$")
-
-function! ScreenMovement(movement)
+" Move according to the screen when wrapped
+function! ScreenMove(move)
   if &wrap
-    return 'g' . a:movement
+    return 'g' . a:move
   else
-    return a:movement
+    return a:move
   endif
 endfunction
+
+" Map screen moves in normal, operator-pending and visual (but not select) modes
+function! MapScreenMove(move)
+  for mapmode in ['n', 'o', 'x']
+    execute mapmode."noremap <silent> <expr>" a:move 'ScreenMove("'.a:move.'")'
+  endfor
+endfunction
+
+call MapScreenMove("j")
+call MapScreenMove("k")
+call MapScreenMove("0")
+call MapScreenMove("^")
+call MapScreenMove("$")