質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.54%

  • Vim

    568questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

vimで記号が含まれたショートカットキーの入力が面倒なので改善したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 760

yuki_90453

score 88

いつもお世話になっております。

vimでショートカットキーに記号を含んだ物があります。例えば「di"」や「"0p」など記号を含んだショートカットキーがありますが、利用する際にshiftキーをホールドしながら入力するのは面倒に感じます。
もしshiftキーのホールドがなければもっと気持ち良く入力出来るのに思いますが、vim側、またはPC側で設定する方法があれば教えて頂けないでしょうか?

私の環境ではテンキーがあるので数字入力をテンキーのみにするなどを出来ればと考えているので、調べても出て来ません。もしかしたら、それを設定することによって何か不具合が発生するのではないかと思うのですが、どうなのでしょうか。

環境
macOS sierra 10.12.2
キーボード mac純正 テンキーつき
IME Google日本語入力

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

現象から、CUIのVim(Terminal.appやiTerm2などの端末上で使うVim)を使っていると想定して書きます。

本題のメインキーの数字キーの動作を変える方法については thinca さんの設定例で行えるはずです。
以下は、テンキーの数字キーまで動作が変わってしまう原因についてです。

何も設定を行っていない標準の状態では、CUIのVimではテンキーは使えないはずです。テンキーを使えるようにする為に、何か設定を行いませんでしたか?

例えばTerminal.app上のVimでテンキーを使えるようにする為の設定として、

設定 - プロファイル - 詳細にある VT100アプリケーションのキーパッドモードを許可 のチェックを外す

というのが Google 検索で見つかりますが、この設定を行っていませんか?

上記設定は「テンキーの数字/記号キーとメインキーの数字/記号キーを区別するモードに変更するのを許可する」かを設定する為の物です。
この設定のチェックを外すとメインキーの数字キーとテンキーの数字キーを区別するモードに端末が変わらなくなる為、テンキーの数字キーがメインキーの数字キーと同じ動作になります。
その為、メインキーの数字キーの動作を変更すると、テンキーの数字キーも同じ動作に変わってしまいます。

メインキーの数字キーとテンキーの数字キーで別の動作をさせる為には、上記設定のチェックを入れたままにする必要があります。

上記設定を有効にしたままテンキーを使えるようにするには、以下の方法があります。

  • Vim 8.1.0142 以降を使う
  • Vim が正しくテンキーを認識できるようにする設定を行う

お勧めなのは Vim 8.1.0142 以降を使う方です。
Vim 8.1.0142 でテンキーを正しく認識する為のパッチが取り込まれた為、これ以降のバージョンのVimを使っている場合はなにも設定しなくてもテンキーが使えるはずです。

Vimのバージョンアップが行えない場合は、テンキーを正しく認識できるようにする設定を行う必要が有ります。この場合、以下の設定を .vimrc に追加して下さい。

if ((&term =~ "xterm" || &term =~ "vt100") && !has("patch-8.1.0142")) || &term =~ "screen"
    if &term =~ "screen" || &term =~ "vt100"
        " keypad + <kPlus>
        exec "set t_K6=\eOk"
        " keypad - <kMinus>
        exec "set t_K7=\eOm"
        " keypad / <kDivide>
        exec "set t_K8=\eOo"
        " keypad * <kMultiply>
        exec "set t_K9=\eOj"
        " keypad Enter <kEnter>
        exec "set t_KA=\eOM"
        " keypad . <kPoint>
        exec "set t_KB=\eOn"
    endif
    " keypad 0 <k0>
    exec "set t_KC=\eOp"
    " keypad 1 <k1>
    exec "set t_KD=\eOq"
    " keypad 2 <k2>
    exec "set t_KE=\eOr"
    " keypad 3 <k3>
    exec "set t_KF=\eOs"
    " keypad 4 <k4>
    exec "set t_KG=\eOt"
    " keypad 5 <k5>
    exec "set t_KH=\eOu"
    " keypad 6 <k6>
    exec "set t_KI=\eOv"
    " keypad 7 <k7>
    exec "set t_KJ=\eOw"
    " keypad 8 <k8>
    exec "set t_KK=\eOx"
    " keypad 9 <k9>
    exec "set t_KL=\eOy"
endif

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

私はテンキーを使っていないので動作は確認していないですが、以下のようにするとどうでしょうか?

noremap 1 !
noremap 2 "
noremap 3 #

" 以下同様

" 上記だけだとテンキーの数字も記号になってしまうかもしれない。もしそうなら以下を試してみる

noremap <k1> 1
noremap <k2> 2
noremap <k3> 3

" 以下同様

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/05 17:48 編集

    回答頂きありがとうございます。
    記号入力についてインサートモードでもかんたんに入力したいと思い下記のように変更したのですがテンキーも記号に変更されてしまいます。何か間違っている部分があればご指摘頂けないでしょうか?

    inoremap 1 !
    inoremap 2 "
    inoremap 3 #


    inoremap <k1> 1
    inoremap <k2> 2
    inoremap <k3> 3

    キャンセル

  • 2017/02/05 18:25

    テンキーのキーマップについてですが、上段のみの記述だとテンキーにも適応されてしまい、下段のテンキー用のキーマップを追加しても上段のキーマップが適応されてしまいます。

    キャンセル

  • 2017/02/07 23:49

    使っているのは CUI の Vim と gVim、どちらでしょうか?
    CUI を使っているのであれば、正直確証はないのですが、テンキーの認識は gVim でしかできないかもしれません。
    そもそも gVim を使っている場合(もしくは gVim で試したけどダメだった場合)は…すいません。ちょっと方法がわからないです。


    希望している方法とは異なりますが、Sticky Shift と呼ばれる入力方法もあります。これは何かしらの prefix キーに続けてキーを押すと、次の文字が Shift と共に押されたように入力される入力方法です(例えば prefix キーが ; の場合は ;1 と押すことで ! が入力される)。
    もし良ければ参考にしてみてください。恐らくググれば Vim で実現する方法が出てくると思います。

    キャンセル

同じタグがついた質問を見る

  • Vim

    568questions

    VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。