2124


学生にviを学習させたいのですが、カーソルキーを使うことを抑制するためのvimrc周辺を教えて下さい。

最終的には`chattr +i`で普通には削除できなくする予定です。


CC BY-SA 3.0
2014-12-16T00:17:35.170
1611
2015-04-22T15:00:39.807
2015-04-22T15:00:39.807
5008
2236
question
vim
vi(vim)で完全にカーソルキーを無効化させたい


vimrc だけでやろうとすると unmap できちゃうので要求を完全には満たせないでしょうけど、やるならばこんな感じでしょうか。

[code]

    noremap  <up>    <nop>
    noremap  <left>  <nop>
    noremap  <right> <nop>
    noremap  <down>  <nop>
    noremap! <up>    <nop>
    noremap! <left>  <nop>
    noremap! <right> <nop>
    noremap! <down>  <nop>
    
[/code]

4つのカーソルキーをそれぞれ `<nop>` にマップしてしまいます。 `noremap` と `noremap!`
では適用されるモードが多少異なりますので、 Vim に付属のヘルプで `:help map-overview` あたりを参照していただければ。


CC BY-SA 3.0
2014-12-16T00:34:50.430
1612
2014-12-16T00:34:50.430
208
1611
answer


こんなのはどうでしょうか。

## キーマッピング: クラシック

.vimrc ファイル

[code]

    vnoremap  <Up>     <nop>
    vnoremap  <Down>   <nop>
    vnoremap  <Left>   <nop>
    vnoremap  <Right>  <nop>
    inoremap  <Up>     <nop>
    inoremap  <Down>   <nop>
    inoremap  <Left>   <nop>
    inoremap  <Right>  <nop>
    noremap   <Up>     <nop>
    noremap   <Down>   <nop>
    noremap   <Left>   <nop>
    noremap   <Right>  <nop>
    
[/code]

## キーマッピング: ステータスメッセージ

`<nop>` より、`<Esc>` にマッピングしして、メッセージを付けたものが以下です。 `Backspace`
も無効にすると、より強い成長が見込めるかもしれません。

.vimrc ファイル

[code]

    let g:arrowWarning = "Use [h][j][k][l] to Move!!!"
    fun! ShowWarning(message)
        echo a:message
    endfun
    nnoremap <buffer> <Left> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    nnoremap <buffer> <Right> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    nnoremap <buffer> <Up> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    nnoremap <buffer> <Down> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    inoremap <buffer> <Left> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    inoremap <buffer> <Right> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    inoremap <buffer> <Up> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    inoremap <buffer> <Down> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    vnoremap <buffer> <Left> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    vnoremap <buffer> <Right> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    vnoremap <buffer> <Up> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    vnoremap <buffer> <Down> <Esc>:call ShowWarning(g:arrowWarning)<CR>
    set backspace=0
    
[/code]

## キーマッピング: ドラゴン

yosh さんに頂いた指摘コメントに従ってヒントを追加し、よりユーザーに優しくしました。 予め、 `cowsay` と `sl`
をシステムにインストールしてください。

  * Ubuntu / Debian: `sudo apt-get cowsay sl`
  * Mac OS X (brew): `brew install cowsay sl`

.vimrc ファイル

[code]

    function TeachKey(message)
        let summon = join(["!clear; cowsay -f dragon ", a:message, "を押すのだ"])
        exec summon
    endfun
    nnoremap <buffer> <Left> <Esc>:call TeachKey('h')<CR>
    nnoremap <buffer> <Right> <Esc>:call TeachKey('l')<CR>
    nnoremap <buffer> <Up> <Esc>:call TeachKey('k')<CR>
    nnoremap <buffer> <Down> <Esc>:call TeachKey('j')<CR>
    nnoremap <buffer> <PageUp> <Esc>:call TeachKey('Ctrl+B')<CR>
    nnoremap <buffer> <PageDown> <Esc>:call TeachKey('Ctrl+F')<CR>
    inoremap <buffer> <Left> <Esc>:call TeachKeyBi)ding('h')<CR>
    inoremap <buffer> <Right> <Esc>:call TeachKey('l')<CR>
    inoremap <buffer> <Up> <Esc>:call TeachKey('k')<CR>
    inoremap <buffer> <Down> <Esc>:call TeachKey('j')<CR>
    inoremap <buffer> <PageUp> <Esc>:call TeachKey('Ctrl+B')<CR>
    inoremap <buffer> <PageDown> <Esc>:call TeachKey('Ctrl+F')<CR>
    vnoremap <buffer> <Left> <Esc>:call TeachKeyBi)ding('h')<CR>
    vnoremap <buffer> <Right> <Esc>:call TeachKey('l')<CR>
    vnoremap <buffer> <Up> <Esc>:call TeachKey('k')<CR>
    vnoremap <buffer> <Down> <Esc>:call TeachKey('j')<CR>
    vnoremap <buffer> <PageUp> <Esc>:call TeachKey('Ctrl+B')<CR>
    vnoremap <buffer> <PageDown> <Esc>:call TeachKey('Ctrl+F')<CR>
    
    nnoremap <buffer> <Del> <Esc>:<C-u>!sl<CR>
    inoremap <buffer> <Del> <Esc>:<C-u>!sl<CR>
    vnoremap <buffer> <Del> <Esc>:<C-u>!sl<CR>
    
    set backspace=0
    
[/code]

**追記** : 慣れたら次はこれで・・・

.vimrc ファイル

[code]

    noremap h <nop>
    noremap j <nop>
    noremap k <nop>
    noremap l <nop>
    
[/code]


CC BY-SA 3.0
2014-12-19T09:05:44.697
2124
2014-12-19T13:28:58.617
2014-12-19T13:28:58.617
4978
4978
1611
answer