🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vim

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

Q&A

解決済

3回答

2332閲覧

vimにおける()や[]や''や""の抜け方

ilovearchlinux

総合スコア15

Vim

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

0グッド

0クリップ

投稿2021/03/27 23:46

普段nvimを使っているんですが、もっといい方法があるのではないかと思い調べたのですが、言語化出来ず調べても求めてる回答を見つけれなかったのでここで伺わせてもらいます。

例えばint main()と関数を記述する際mainの後に()を入力する訳ですが(auto-pairsより自動で後ろの括弧も生成される 但しカーソルは括弧内)この抜け方を自分は**ctrl+[(esc)A(shift+a)**で行っていますが如何せん指が厳しいのでvimmerはどうしているのか知りたいです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

int main(|)
のときに(|にカーソルがある)
どうやって
int main() {
を入力するのか({部分を入力するのか)という質問だと読み取りました。


自動括弧入力を使っている場合だと普通に閉じ括弧を入力する(この場合は)を入力して{を入力する)人が多い気がします。
auto-pairsでできるかはわからないですが、有名どころの https://github.com/cohama/lexima.vim や私の使ってる https://github.com/windwp/nvim-autopairs ではそれができます。

あとはEmacsのキーバインディングをInsertモードに適用して
inoremap <C-f> <right>
Ctrl-fするのもいいのかと思います。

投稿2021/03/28 02:00

編集2021/03/28 02:06
yutkat

総合スコア135

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

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

ilovearchlinux

2021/03/28 04:42

なるほど つまり普通に()と入力するわけですね その場合自動括弧の価値は引数ある場合やint main(){}の{}の場合や""や''などのときに意味があるって認識で良いのでしょうか?
yutkat

2021/03/28 05:17

あとはセミコロンが行末にない言語のときに関数を使うときとかでしょうか。 こういう↓のようなやつです。 `let aaa = foo("bar")`
ilovearchlinux

2021/03/28 08:32

なるほど たしかにpythonやシェルスクリプト等だといいですね c++をメインで利用していたので... 回答有り難う御座います
guest

0

既にベストアンサーが出ていますが、この手の設定はleximaが最も自由度が高いと思います。
https://github.com/cohama/lexima.vim

例えば自分は

let s:rules = [ \ { 'char': '<C-f>', 'at': '\%#\s*)', 'input': '<Left><C-o>f)<Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*\}', 'input': '<Left><C-o>f}<Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*]', 'input': '<Left><C-o>f]<Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*>', 'input': '<Left><C-o>f><Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*`', 'input': '<Left><C-o>f`<Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*"', 'input': '<Left><C-o>f"<Right>' }, \ { 'char': '<C-f>', 'at': '\%#\s*''', 'input': '<Left><C-o>f''<Right>' }, \ ] for s:rule in s:rules call lexima#add_rule(s:rule) endfor

というルールを適用して、 <C-f> で抜けられるようにしています。
あとは <Tab> を設定するなどもいいかと思います。

また、この質問をみて先ほど思いついて設定したのですが

let s:rules += [ \ { 'char': ';', 'at': '(.*\%#)$', 'input': '<Right>;' }, \ { 'char': ';', 'at': '^\s*\%#)$', 'input': '<Right>;' }, \ { 'char': ';', 'at': '(.*\%#\}$', 'input': '<Right>;' }, \ { 'char': ';', 'at': '^\s*\%#\}$', 'input': '<Right>;' }, \ ]

と追加し、 ; を入力して func(<Cursor>) から func();<Cursor>
<Cursor>) から );<Cursor> とセミコロンを挿入できるようにしました。

もしこういった強力な設定を行いたければleximaを使うのがおすすめです。

投稿2021/03/28 05:24

編集2021/03/28 05:27
yuki-yano

総合スコア132

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

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

ilovearchlinux

2021/03/28 08:30

こんにちは 回答有り難うございます自分はvimにまだ精通していないので厳しいような気がしますが参考にさせていただきます 別件ですがfzf-previewを開発されてる方ですか?利用させていただいでいます 間違っていたらすみません
yuki-yano

2021/03/28 08:32

ですね、fzf-previewは自分が開発しています。 使って貰えてありがたいです。ありがとうございます。
guest

0

こちらのプラグインを使ってみると良いかと思います

投稿2021/03/28 00:10

編集2021/03/28 00:12
Hasu83

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問