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

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

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

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

Q&A

解決済

3回答

3772閲覧

vimrcにおける括弧補完の仕方と意味

kamecha

総合スコア41

Vim

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

0グッド

0クリップ

投稿2019/06/07 05:15

実現したいこと

 現在vimのかっこよさに憧れてvimを触っていますが、最近vimrcの存在を知り早速使用してみようと思い、
様々なサイトを参考にコピペしてみたのですが、うまく動作しないので、その解決策を教えていただいたいです。

該当のソースコード

vimrcのこの部分についてです。

inoremap {<Enter> {}<Left><CR><ESC><S-o>

理想の動作

例えば以下の<>の間にカーソルがあってその後に{と打ってreturnを打つと

c

1int main(void)</*カーソル*/>

c

1int main(void){ 2 </*カーソル*/> 3}

となって欲しいのですが、現在の環境だと

c

1int main(void){ 2 </*カーソル*/> 3 }

となってしまい非常に美しくありません。
なぜこのような動作をおこってしまうのでしょうか。
また、inoremapの後のCRS-oが何を意味しているのかわかりません。
できればそこも教えていただければ幸いです。

###補足情報
まだ初心者でvimrcを編集し始めたばかりで、どこが悪いのかわからないので自分のvimrcを置いておきます。

"行番号を表示 set number "シンタックスハイライト syntax on "タブ文字 set tabstop=4 "自動タブの設定 set smartindent "自動タブ文字 set shiftwidth=4 "改行時に前の行のインデントを継続する set autoindent "括弧の補完 inoremap { {}<Left> inoremap {<Enter> {}<Left><CR><ESC><S-o> inoremap ( ()<ESC>i inoremap (<Enter> ()<Left><CR><ESC><S-o> inoremap ' ''<LEFT> inoremap " ""<LEFT>

まだこれだけしか編集しておりません。

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

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

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

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

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

guest

回答3

0

色々試すの面白いですよね。
私もvimの魅力には待ってます。笑
<Left><Roght>
カーソルを左右に一つ移動
<ESC><S-o>
ESCボタンを押したときと同じ挙動。
S-oは
Shift + o

ちなみに
C-oは
Ctrl + o
です。
色々キーマップで遊べます。

ということで
inoremap {<Enter> {}<Left><CR><CR><BS><Up><Right>

挿入モードで{エンターをすると
{}が入力され、左にカーソルを一つ移動させ、改行、改行、一つBackSpaceし
上に上がって右に移動。
という意味になります。

キーボードで操作できることをvimが変わりにやってくれるってことですね。
ちなみに、相当粗がありますが、私は下記のようにキーマップして遊んでます。

まぁ、正直自分でキーマップ作るより優秀なプラグイン入れたほうが便利ですが。。笑

vim

1 2"---新規カッコ,"クォーテション作成 3inoremap { {}<Left> 4inoremap ( ()<Left> 5inoremap [ []<Left> 6inoremap " ""<Left> 7inoremap ' ''<Left> 8"---新規カッコ空閉じ,"クォーテション作成 9inoremap {{ {} 10inoremap (( () 11inoremap [[ [] 12inoremap "<CR> "" 13inoremap '<CR> '' 14"---新規カッコ閉じ CSS書く用--- 15inoremap {<CR> {};<Left><Left><CR><ESC><S-o> 16inoremap (<CR> ();<Left><Left><CR><ESC><S-o> 17inoremap [<CR> [];<Left><Left><CR><ESC><S-o> 18"---既存タグにカッコつけ--- 行末にカッコつけ 19inoremap {<TAB> {<Right><ESC>$a} 20inoremap (<TAB> (<Right><ESC>$a) 21inoremap [<TAB> [<Right><ESC>$a] 22inoremap "<TAB> "<Right><ESC>$a" 23inoremap '<TAB> '<Right><ESC>$a' 24"---既存タグにカッコつけ--- 単語末にカッコつけ 25inoremap {} {<Right><ESC>Ea} 26inoremap () (<Right><ESC>Ea) 27inoremap (/ (<Right><ESC>t/a) 28inoremap (. (<Right><ESC>t.a) 29inoremap [] [<Right><ESC>Ea] 30inoremap ") "<Right><ESC>t)a" 31inoremap "} "<Right><ESC>t}a" 32inoremap "] "<Right><ESC>t]a" 33inoremap ", "<Right><ESC>t,a" 34inoremap ": "<Right><ESC>t:a" 35inoremap "; "<Right><ESC>t;a" 36inoremap ') '<Right><ESC>t)a' 37inoremap '} '<Right><ESC>t}a' 38inoremap '] '<Right><ESC>t]a' 39inoremap ', '<Right><ESC>t,a' 40inoremap ': '<Right><ESC>t:a' 41inoremap '; '<Right><ESC>t;a' 42"---既存タグにカッコつけ--- 43inoremap {<Right> { 44inoremap (<Right> ( 45inoremap [<Right> [ 46inoremap "<Right> " 47inoremap '<Right> '

投稿2019/06/07 10:59

編集2019/06/07 11:02
shuzi

総合スコア197

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

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

kamecha

2019/06/08 00:17

僕も最近触り始めたばかりなので、ちょくちょく追加していきたいと思います!
guest

0

確かかどうかはわかりませんが、CRといえば改行コードです。
<S -o>についてはわかりませんでした。


で、理想の動作を実現してみました。
vimrcにこれと置き換えてやってみてください。

inoremap {<Enter> {}<Left><CR><CR><BS><Up><Right>

投稿2019/06/07 06:27

Ryupe

総合スコア426

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

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

kamecha

2019/06/07 10:34

回答有難うございます。 今のところ理想の動作になっています。 ここで質問なのですが、 `{` ~ `<CR>`までの流れは理解できるのですが、`<BS>` ~ `<Right>`の流れがよく分かっていないので、 解説してくださるとありがたいです。
Ryupe

2019/06/07 15:55

返事が遅くなって申し訳ないです。 <BS>と<Right>についてですが、shuziさんの解説の通りでバックスペースキー、カーソルを右に移動の挙動を取ります。
kamecha

2019/06/08 00:16

返信有難うございます。 助かりました
guest

0

ベストアンサー

原因は、set smartindentですね。文字通りの意味ですが、インデントのされ方が自分の意図と違う場合は止めた方が良いのでは?

CRとS-oが何を意味しているのかわかりません。

「CR」は「Enter」と同じ。プログラミングでちょくちょく出てくる\rです。
「S-o」は「シフトo」

投稿2019/06/07 14:57

otn

総合スコア84555

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

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

kamecha

2019/06/08 00:23

回答有難うございます。 いろんなサイトを参考にコピペしてただけなので、`set smartindent`の意味も`set autoindent` の意味も よく分かっていないので、このような事になったのですね。 いやぁ、単なるコピペは駄目なんだなぁ...
otn

2019/06/08 03:51

意味のわからない設定はしない方が良いです。
kamecha

2019/06/08 07:17

有難うございます。 `S-o`等の意味を理解できたので少しずつ追加編集していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問