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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Vim

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

Q&A

解決済

2回答

2163閲覧

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

yuki_90453

総合スコア326

Vim

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

0グッド

0クリップ

投稿2017/02/04 14:57

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

現象から、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 に追加して下さい。

Vim

1if ((&term =~ "xterm" || &term =~ "vt100") && !has("patch-8.1.0142")) || &term =~ "screen" 2 if &term =~ "screen" || &term =~ "vt100" 3 " keypad + <kPlus> 4 exec "set t_K6=\eOk" 5 " keypad - <kMinus> 6 exec "set t_K7=\eOm" 7 " keypad / <kDivide> 8 exec "set t_K8=\eOo" 9 " keypad * <kMultiply> 10 exec "set t_K9=\eOj" 11 " keypad Enter <kEnter> 12 exec "set t_KA=\eOM" 13 " keypad . <kPoint> 14 exec "set t_KB=\eOn" 15 endif 16 " keypad 0 <k0> 17 exec "set t_KC=\eOp" 18 " keypad 1 <k1> 19 exec "set t_KD=\eOq" 20 " keypad 2 <k2> 21 exec "set t_KE=\eOr" 22 " keypad 3 <k3> 23 exec "set t_KF=\eOs" 24 " keypad 4 <k4> 25 exec "set t_KG=\eOt" 26 " keypad 5 <k5> 27 exec "set t_KH=\eOu" 28 " keypad 6 <k6> 29 exec "set t_KI=\eOv" 30 " keypad 7 <k7> 31 exec "set t_KJ=\eOw" 32 " keypad 8 <k8> 33 exec "set t_KK=\eOx" 34 " keypad 9 <k9> 35 exec "set t_KL=\eOy" 36endif

投稿2018/09/26 02:57

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

vim

1noremap 1 ! 2noremap 2 " 3noremap 3 # 4 5" 以下同様 6 7" 上記だけだとテンキーの数字も記号になってしまうかもしれない。もしそうなら以下を試してみる 8 9noremap <k1> 1 10noremap <k2> 2 11noremap <k3> 3 12 13" 以下同様

投稿2017/02/04 15:44

thinca

総合スコア1864

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2017/02/05 09:18 編集

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

2017/02/05 09:25

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

2017/02/07 14:49

使っているのは CUI の Vim と gVim、どちらでしょうか? CUI を使っているのであれば、正直確証はないのですが、テンキーの認識は gVim でしかできないかもしれません。 そもそも gVim を使っている場合(もしくは gVim で試したけどダメだった場合)は…すいません。ちょっと方法がわからないです。 希望している方法とは異なりますが、Sticky Shift と呼ばれる入力方法もあります。これは何かしらの prefix キーに続けてキーを押すと、次の文字が Shift と共に押されたように入力される入力方法です(例えば prefix キーが ; の場合は ;1 と押すことで ! が入力される)。 もし良ければ参考にしてみてください。恐らくググれば Vim で実現する方法が出てくると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問