web-dev-qa-db-ja.com

Vimの最も生産的なショートカットは何ですか?

私は Vim について長所と短所の両方について多くのことを聞いた。他のどのエディタよりも(開発者として)Vimのほうが速いはずです。私はいくつかの基本的なことをするためにVimを使っていますが、せいぜい10回生産性が低い Vimを使っています。

あなたがスピードについて話すときあなたが気をつけるべきである(あなたはそれらを十分に気にかけないかもしれないがあなたがすべきである)2つのことだけがある:

  1. 左手と右手を交互に使用するのが、キーボードを使用する最速の方法です。
  2. マウスに触れないことは、できる限り速くするための2番目の方法です。手を動かし、マウスをつかみ、動かしてからキーボードに戻すには時間がかかります(そして、正しい位置に手を正しく戻したことを確認するには、キーボードをよく見なければなりません)。

これが私がなぜVimの生産性がはるかに低いのかを示す2つの例です。

コピー/切り取り&貼り付けずっとやります。現代のすべての編集者と共にあなたが押す Shift 左手で、右手でカーソルを動かしてテキストを選択します。それから Ctrl+C コピーする場合は、カーソルを移動して Ctrl+V 貼り付けます。

Vimではそれは恐ろしいことです。

  • yyで1行コピーします(行全体をコピーする必要はほとんどありません)。
  • [number xx]yyxx行をバッファにコピーします。しかし、あなたが望むものを選択したかどうかを正確に知ることはありません。元に戻すには、[number xx]dd次にuを実行する必要があります。

もう一つの例? 検索と置換。

  • In PSPad : Ctrl+f 検索したいものを入力してから、を押します。 Enter
  • Vimでは:/で検索したいものをタイプしてください。そして特殊文字があれば\each特殊文字の前にを押してから、を押す Enter

そして、Vimを使ったすべてのものはそのようなものです。正しい方法でそれを処理する方法がわからないようです。

NB:私はすでにVimを読んだ チートシート:)

私の質問は:

現代の編集者よりも生産的なVimの使い方は何ですか?

1127
Olivier Pons

あなたはテキストの選択とコピーについて話しています、私はあなたが Vim Visual Mode を見てみるべきだと思います。

ビジュアルモードでは、Vimのコマンドを使ってテキストを選択することができ、それからあなたはその選択で何でもすることができる。

以下の一般的なシナリオを検討してください。

次に一致するかっこを選択する必要があります。

あなたがすることができます:

  • v%カーソルが開始/終了括弧の上にある場合
  • vibカーソルが括弧ブロック内にある場合

あなたは引用符の間のテキストを選択したいです:

  • vi "二重引用符
  • 一重引用符の場合はvi '

あなたは中括弧ブロックを選択したい(Cスタイル言語では非常に一般的です):

  • viB
  • vi{

ファイル全体を選択します。

  • ggVG

ビジュアルブロック選択 もう一つの本当に便利な機能です、それはあなたがテキストの長方形の領域を選択することを可能にします、あなたはただ押すだけ Ctrl - V それを開始し、そしてあなたが望むテキストブロックを選択し、そしてヤンク、削除、貼り付け、編集等のようなあらゆるタイプの操作を実行する。編集するのは素晴らしい コラム指向テキスト。

505
CMS

いくつかの生産性のヒント:

スマートな動き

  • *および#は、カーソルを前方または後方に置いてWordを検索します。
  • 次のWordへのw
  • 次のスペース区切りのWordへのW
  • 現在のWordの先頭/末尾までのb/e。 (スペースで区切られた場合のみB/E
  • gg/Gはファイルの先頭/末尾にジャンプします。
  • %は、一致する{..}または(..)などにジャンプします。
  • {/}は次の段落にジャンプします。
  • '.は最後に編集した行に戻ります。
  • g;は最後に編集した位置に戻ります。

クイック編集コマンド

  • 先頭にIを挿入します。
  • Aは最後に追加します。
  • o/Oは、現在の前後に新しい行を開きます。
  • v/V/Ctrl+Vビジュアルモード(テキストを選択するため)
  • テキストを置換するShift+R
  • Cは行の残りの部分を変更します。

コマンドを組み合わせる

ほとんどのコマンドは量と方向を受け入れます。例えば:

  • cW = Wordの末尾まで変更
  • 3cW = 3ワードを変更
  • BcW =フルワードの始まり、フルワードの変更
  • ciW =内側のWordを変更します。
  • ci" = ".."の間で内側を変更
  • ci( =(..)の間でテキストを変更
  • ci< = <..>の間でテキストを変更します(vimrcではset matchpairs+=<:>が必要です)
  • 4dd = 4行削除
  • 3x = 3文字を削除します。
  • 3s = 3文字を代入します。

便利なプログラマコマンド

  • rは1文字を置き換えます(例えば、rdは現在のcharをdに置き換えます)。
  • ~は大文字小文字を変更します。
  • Jは2行を結合します
  • Ctrl + A/Ctrl + Xは数字を増減します。
  • .最後のコマンドを繰り返す(単純なマクロ)
  • ==行のインデントを修正
  • >インデントブロック(ビジュアルモード)
  • < unindent block(ビジュアルモード)

マクロ撮影

  • q[ key ]を押して録音を始めます。
  • 次にqを押して記録を停止します。
  • マクロは@[ key ]で再生できます。

非常に特殊なコマンドや動作を使用することで、VIMは次の行にそれらの正確なアクションを再生できます。 (例:末尾に追加する場合はA、カーソルをWordの先頭または末尾に移動する場合はb/e

よくできた設定の例

# reset to vim-defaults
if &compatible          # only if not set before:
  set nocompatible      # use vim-defaults instead of vi-defaults (easier, more user friendly)
endif

# display settings
set background=dark     # enable for dark terminals
set nowrap              # dont wrap lines
set scrolloff=2         # 2 lines above/below cursor when scrolling
set number              # show line numbers
set showmatch           # show matching bracket (briefly jump)
set showmode            # show mode in status bar (insert/replace/...)
set showcmd             # show typed command in status bar
set ruler               # show cursor position in status bar
set title               # show file in titlebar
set wildmenu            # completion with menu
set wildignore=*.o,*.obj,*.bak,*.exe,*.py[co],*.swp,*~,*.pyc,.svn
set laststatus=2        # use 2 lines for the status bar
set matchtime=2         # show matching bracket for 0.2 seconds
set matchpairs+=<:>     # specially for html

# editor settings
set esckeys             # map missed escape sequences (enables keypad keys)
set ignorecase          # case insensitive searching
set smartcase           # but become case sensitive if you type uppercase characters
set smartindent         # smart auto indenting
set smarttab            # smart tab handling for indenting
set magic               # change the way backslashes are used in search patterns
set bs=indent,eol,start # Allow backspacing over everything in insert mode

set tabstop=4           # number of spaces a tab counts for
set shiftwidth=4        # spaces for autoindents
#set expandtab           # turn a tabs into spaces

set fileformat=unix     # file mode is unix
#set fileformats=unix,dos    # only detect unix file format, displays that ^M with dos files

# system settings
set lazyredraw          # no redraws in macros
set confirm             # get a dialog when :q, :w, or :wq fails
set nobackup            # no backup~ files.
set viminfo='20,\"500   # remember copy registers after quitting in the .viminfo file -- 20 jump links, regs up to 500 lines'
set hidden              # remember undo after quitting
set history=50          # keep 50 lines of command history
set mouse=v             # use mouse in visual mode (not normal,insert,command,help mode


# color settings (if terminal/gui supports it)
if &t_Co > 2 || has("gui_running")
  syntax on          # enable colors
  set hlsearch       # highlight search (very useful!)
  set incsearch      # search incremently (search while typing)
endif

# paste mode toggle (needed when using autoindent/smartindent)
map <F10> :set paste<CR>
map <F11> :set nopaste<CR>
imap <F10> <C-O>:set paste<CR>
imap <F11> <nop>
set pastetoggle=<F11>

# Use of the filetype plugins, auto completion and indentation support
filetype plugin indent on

# file type specific settings
if has("autocmd")
  # For debugging
  #set verbose=9

  # if bash is sh.
  let bash_is_sh=1

  # change to directory of current file automatically
  autocmd BufEnter * lcd %:p:h

  # Put these in an autocmd group, so that we can delete them easily.
  augroup mysettings
    au FileType xslt,xml,css,html,xhtml,javascript,sh,config,c,cpp,docbook set smartindent shiftwidth=2 softtabstop=2 expandtab
    au FileType tex set wrap shiftwidth=2 softtabstop=2 expandtab

    # Confirm to PEP8
    au FileType python set tabstop=4 softtabstop=4 expandtab shiftwidth=4 cinwords=if,Elif,else,for,while,try,except,finally,def,class
  augroup END

  augroup Perl
    # reset (disable previous 'augroup Perl' settings)
    au!  

    au BufReadPre,BufNewFile
    \ *.pl,*.pm
    \ set formatoptions=croq smartindent shiftwidth=2 softtabstop=2 cindent cinkeys='0{,0},!^F,o,O,e' " tags=./tags,tags,~/devel/tags,~/devel/C
    # formatoption:
    #   t - wrap text using textwidth
    #   c - wrap comments using textwidth (and auto insert comment leader)
    #   r - auto insert comment leader when pressing <return> in insert mode
    #   o - auto insert comment leader when pressing 'o' or 'O'.
    #   q - allow formatting of comments with "gq"
    #   a - auto formatting for paragraphs
    #   n - auto wrap numbered lists
    #   
  augroup END


  # Always jump to the last known cursor position. 
  # Don't do it when the position is invalid or when inside
  # an event handler (happens when dropping a file on gvim). 
  autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \   exe "normal g`\"" | 
    \ endif 

endif # has("autocmd")

設定は~/.vimrcに格納するか、システム全体で/etc/vimrc.localに格納してから、以下を使用して/etc/vimrcファイルから読み取ることができます。

source /etc/vimrc.local

#コメント文字をVIMで動作させるためには"に置き換える必要があります。ここでは適切な構文の強調表示をしたいと思いました)。

ここにリストしたコマンドはかなり基本的なもので、これまで使用してきた主要なものです。彼らはすでに私の生産性をかなり向上させています。

207
vdboor

の Control+R メカニズムは非常に便利です:-) 挿入モードまたはコマンドモード(つまり、コマンドを入力するときは:行に)どちらでも、番号付きまたは名前付きレジスタを続けます。

  • a - z 名前付きレジスタ
  • " 最後の削除またはヤンクのテキストを含む名前なしレジスタ
  • % 現在のファイル名
  • # 代替ファイル名
  • * クリップボードの内容(X11:一次選択)
  • + クリップボードの内容
  • / 最後の検索パターン
  • : 最後のコマンドライン
  • . 最後に挿入されたテキスト
  • - 最後の小さい(1行未満)削除
  • =5*5 25をテキストに挿入(ミニ計算機)

詳細については:help i_CTRL-R:help c_CTRL-Rを参照してください。さらにCTRL-Rの良さについては近くをスヌープしてください。

98
kev

Vimプラグイン

ここにはたくさんの良い答えがあります、そしてviの禅についての1つの驚くべき答えがあります。私が言及していないことの一つは、vimはプラグインを介して非常に拡張可能であるということです。原作者が考えたことのないあらゆる種類のクレイジーなことを行わせるためのスクリプトとプラグインがあります。これは信じられないほど便利なvimプラグインの例です。

Rails.vim

Rails.vimはtpopeによって書かれたプラグインです。それはRails開発をしている人々のための素晴らしいツールです。それはあなたが簡単にコントローラのメソッドから関連するビューへ、モデルへ、そしてそのモデルのユニットテストへとジャンプすることを可能にする魔法の文脈依存の事をします。それはRails開発者として数百時間ではないにしても数十時間を節約しました。

Gist.vim

このプラグインを使用すると、ビジュアルモードでテキストの領域を選択し、 Gist.github.com に投稿するためのクイックコマンドを入力できます。これにより、簡単なペーストビンへのアクセスが可能になります。これは、IRCまたはIMを介して他のユーザーと共同作業している場合には非常に便利です。

space.vim

このプラグインはスペースバーに特別な機能を提供します。スペースバーをピリオドに似たものに変えますが、アクションを繰り返す代わりにモーションを繰り返します。その場で定義した方法でファイルを素早く移動するのに非常に便利です。

-round.vim

このプラグインを使用すると、何らかの方法で区切られているテキストを操作できます。それはあなたに、括弧の中のもの、クォートの中のものなどを表すオブジェクトを与えます。それは、区切られたテキストを操作するために役に立ちます。

supertab.vim

このスクリプトは派手なタブ補完機能をvimにもたらします。オートコンプリート機能はすでにvimの中核にありますが、これは複数の異なるマルチキーショートカットではなくクイックタブにそれをもたらします。とても便利で、そして信じられないほど使うのが楽しいです。これはVSのインテリセンスではありませんが、それは素晴らしいステップであり、タブ補完ツールに期待したいと思う多くの機能をもたらします。

syntastic.vim

このツールは外部の文法チェックコマンドをvimに取り入れます。私は個人的にそれを使ったことはありませんが、私はそれについて素晴らしいことを聞きました、そして概念は打ち負かすのは難しいです。手作業で行わなくても構文をチェックすることは非常に時間の節約になり、最終的にテストを中止するときよりも、導入時に構文上のバグを見つけるのに役立ちます。

fugitive.vim

Vimの内側からgitに直接アクセスする。繰り返しますが、私はこのプラグインを使ったことはありませんが、ユーティリティを見ることができます。残念ながら、私はsvnが "new"と見なされる文化にいるので、しばらくの間gitが動作しているとは思わないでしょう。

nerdtree.vim

Vim用のツリーブラウザ私は最近これを使い始めました、そしてそれは本当に便利です。ツリービューを縦に分割してファイルを簡単に開くことができます。これは、頻繁に飛び交うソースファイルが多数あるプロジェクトに最適です。

FuzzyFinderTextmate.vim

これはメンテナンスされていないプラグインですが、それでも信じられないほど便利です。それは「あいまいな」記述構文を使用してファイルを開く機能を提供します。つまり、スパースツリーのファイルでは、関心のあるファイルを残りの部分から明確にするのに十分な文字を入力するだけで済みます。

結論

Vimには素晴らしいツールがたくさんあります。私はここで表面を傷つけただけだと確信しています、そしてそれはあなたのドメインに適切なツールを探す価値があります。伝統的なviの強力なツールセット、それに対するvimの改良、そしてさらにvimを拡張するプラグインの組み合わせは、これまで考えられてきたテキストを編集するための最も強力な方法の1つです。 Vimはemacs、Eclipse、ビジュアルスタジオ、そしてテキストメイトと同じくらい簡単に強力です。

ありがとう

duwanis のおかげで vimの設定 のおかげで、私はここから多くのことを学び、ほとんどのプラグインを借りてきました。

91
Benson

.最後のテキスト変更コマンドを繰り返す

私はこれで多くの時間を節約できます。

ビジュアルモードについては前述しましたが、テキストファイルの固定サイズの列を編集するときにブロックビジュアルモードを使用すると、時間が大幅に節約されます。 (Ctrl + Vでアクセス).

53
Cooper6581

gi

最後に編集した場所に移動します(検索を実行し、編集に戻りたい場合に非常に便利です)

^ Pおよび^ N

前のテキスト(^ P)または次のテキスト(^ N)を入力します。

^ Oおよび^ I

前の場所(^O-"O")に移動するか、次の場所(^I-"I"のすぐ近くにある"O")に移動します。検索を実行したり、ファイルを編集したりすると、これらの「ジャンプ」を前後にナビゲートできます。

48
dimba

私は最近このサイトを発見しました: http://vimcasts.org/ /

それはかなり新しくて本当に本当に良いです。このサイトを運営している人は、textmateからvimに切り替え、特定のvimトピックについて非常によく簡潔にキャストしています。見てみな!

46
Ronny Brendel

CTRL + Aは立っている数を増やします。

42
hcs42

ノーマルモードの全て:

現在行の特定の文字の次のインスタンスに移動するにはf <char>、繰り返すには;を使用します。

現在行の特定の文字の前のインスタンスに移動するにはF <char>、繰り返すには;を使用します。

インテリジェントに使用されるならば、上記の2つはあなたが並んで動き回るのをより速くすることができます。

次のインスタンスを検索するWordの*

前のインスタンスを検索するWordの

38
Eric Smith

セッション

a。セッションを保存

:mks セッション名

b。セーブセッションを強制する

:mks! セッション名

c。ロードセッション

gvimまたはvim -S sessionname


足し算と引き算

a。足し算と引き算

CTRL-A;カーソル位置またはカーソル位置の後ろに、数字または英字に[count]を追加します。 {Viにはない

CTRL-X;カーソル位置またはその後ろにある数字または英字から[count]を引きます。 {Viにはない}

b。ウィンドウキーのマッピング解除

ウィンドウ内では、Ctrl-Aはファイル全体の選択のためにすでにマップされているので、rcファイルにマップ解除する必要があります。 mswin.vim CTRL-Aマッピング部分をコメントとしてマークするか、アンマップでrcファイルを追加します。

c。マクロあり

CTRL-Aコマンドはマクロで非常に役に立ちます。例:番号付きリストを作成するには、次の手順を使用します。

  1. 最初のリスト項目を作成し、それが番号で始まっていることを確認してください。
  2. qa - バッファ 'a'への記録を開始
  3. Y - エントリーをヤンク
  4. p - エントリのコピーを最初のエントリの下に置きます
  5. CTRL-A - 数を増やす
  6. q - 録画を停止
  7. @a - ヤンクを繰り返し、putとtimesをインクリメントする
34
agfe2

先週の仕事で、私たちのプロジェクトは他のプロジェクトから多くのPythonコードを継承しました。残念ながら、そのコードは私たちの既存のアーキテクチャには収まりませんでした - それはすべてグローバル変数と関数で行われていましたが、それらはマルチスレッド環境では動作しませんでした。

オブジェクト指向になるように作り直す必要のある80個までのファイルがありました - すべての関数がクラスに移動された、パラメータが変更された、i​​mport文が追加されたなどです。私は一人の人間が手作業でそれをすることが1日に2-4を行うことができると推定するでしょう。

そこで私は最初の1つを手作業で行い、それから変更を自動化するためのvimスクリプトを書きました。そのほとんどはvimコマンドのリストでした。

" delete an un-needed function "
g/someFunction(/ d

" add wibble parameter to function foo "
%s/foo(/foo( wibble,/

" convert all function calls bar(thing) into method calls thing.bar() "
g/bar(/ normal nmaf(ldi(`aPa.

最後のものは少し説明に値する:

g/bar(/  executes the following command on every line that contains "bar("
normal   execute the following text as if it was typed in in normal mode
n        goes to the next match of "bar(" (since the :g command leaves the cursor position at the start of the line)
ma       saves the cursor position in mark a
f(       moves forward to the next opening bracket
l        moves right one character, so the cursor is now inside the brackets
di(      delete all the text inside the brackets
`a       go back to the position saved as mark a (i.e. the first character of "bar")
P        paste the deleted text before the current cursor position
a.       go into insert mode and add a "." 

すべてのimport文を生成するなど、さらに複雑な変換をいくつか行うために、Pythonをvimスクリプトに埋め込みました。

数時間の作業の後、少なくとも95%の変換を実行するスクリプトがありました。ファイルをvimで開いて:source fixit.vimを実行するだけで、ファイルは瞬く間に変換されます。

自動化して結果をテストする価値のない残りの5%を変更する作業はまだ残っていますが、このスクリプトを書くのに1日を費やすことで、何週間もの作業を節約できたと私は思います。

もちろん、これをPythonやRubyのようなスクリプト言語で自動化することは可能でしたが、書くのにははるかに時間がかかり、柔軟性が劣るでしょう。ネストした括弧、例えばbar(foo(xxx))foo(xxx).bar()に変換します。 Vimはその作業に完璧でした。

32
Dave Kirby

組み込みファイルエクスプローラを使用してください。このコマンドは:Exploreであり、これを使用するとソースコードを非常に高速にナビゲートできます。 .vimrcにこれらのマッピングがあります。

map <silent> <F8>   :Explore<CR>
map <silent> <S-F8> :sp +Explore<CR>

エクスプローラを使ってファイルを変更することもできます。私のお気に入りのキーをいくつか投稿します。<F1>を押すと全リストが表示されます。

  • - :最も便利:上位ディレクトリに移動(cd ..
  • mf :ファイルをマークする
  • _ d _ :マークが付いているファイルまたはカーソルが置かれているファイルを削除します(マークが付いていない場合).
  • _ r _ :カーソルがあるファイルの名前を変更します。
  • d :現在のディレクトリに新しいディレクトリを作成します。
  • :カレントディレクトリに新しいファイルを作成します
28
soulmerge

私はアメリカ暗号協会の会員です。隔月誌には、さまざまな種類の100以上の暗号文が掲載されています。これらのうちのおよそ15個は「暗号」であり、文字を数字に置き換えたさまざまなタイプの算術問題です。数字の代わりに文字を除いて、これらのうちの2つか3つは数独です。グリッドが完成すると、9つの異なる文字が、グリッド内のどこかに、線、対角線、らせんなどで単語を綴ります。

鉛筆で作業したり、問題を手書きで入力するのではなく、問題をWebサイトのメンバーエリアからダウンロードします。

これらの数独を使って作業するとき、私はviを使います。viが持っている機能を他の編集者がほとんど持っていないからです。解くのが簡単だと思うので、主に文字付きグリッドを番号付きグリッドに変換してから、完成した番号付きグリッドを文字付きグリッドに戻して解決策の単語を見つけます。

問題は9つの文字からなる9つのグループとしてフォーマットされ、2つの行に書かれた-sがブランクを表します。最初のステップは、これらをそれぞれ9文字の9行にフォーマットすることです。これについて特別なことは何もありません。ただ8つの改行を適切な場所に挿入するだけです。

結果は次のようになります。

T-O-----C
-E-----S-
--AT--N-L
---NASO--
---E-T---
--SPCL---
E-T--OS--
-A-----P-
S-----C-T

したがって、これを数字に変換する最初のステップは、異なる文字のリストを作成することです。まず、ブロックのコピーを作ります。私はカーソルをブロックの一番上に置いてから:y}}pとタイプします。 :は私をコマンドモードにし、yは次の移動コマンドをヤンクします。 }は次の段落の終わりへの移動なので、y}はその段落をヤンクします。 }はカーソルを段落の最後に移動し、pはカーソルの直後にヤンクしたものを貼り付けます。そのため、y}}pは次の段落のコピーを作成し、その2つのコピーの間にカーソルを置きます。

次に、それらのコピーの1つを異なる文字のリストに変換します。そのコマンドはもう少し複雑です。

:!}tr -cd A-Z | sed 's/\(.\)/\1\n/g' | sort -u | tr -d '\n'

:は再び私をコマンドモードにします。 !は、次のヤンクの内容をコマンドラインでパイプ処理する必要があることを示します。 }は次の段落をヤンクし、次にコマンドラインはtrコマンドを使用して大文字以外のすべてを取り除き、sedコマンドは各行を1行に印刷し、sortコマンドはそれらの行をソートして重複を除去します。そしてtrは改行を取り除き、最初の段落を構成していた9行を置き換えて、9行の1文字を区別します。この場合、文字はACELNOPSTです。

次のステップはグリッドの別のコピーを作ることです。そして、私が今識別した文字を使って、それらの文字をそれぞれ1から9の数字に置き換えます。それは簡単です::!}tr ACELNOPST 0-9。年です。結果:

8-5-----1
-2-----7-
--08--4-3
---4075--
---2-8---
--7613---
2-8--57--
-0-----6-
7-----1-8

これは通常の方法で解決されるか、またはあなたが好むかもしれない数独ソルバーに入力することができます。完成した解は:!}tr 1-9 ACELNOPSTで文字に変換できます。

ごく少数の人に匹敵する力がviにあります。最大の問題は、viのチュートリアルブック、Webサイト、ヘルプファイルなどのほんのわずかなものしか、可能なことの表面にほとんど触れられていないことです。

25
Jeff Dege

大量のテキスト操作

どちらかのマクロを通して:

  • 記録から始めましょう:qq
  • ものをやる
  • 記録を停止します:q
  • 繰り返します:@q(初回)、その後@@
  • 20回繰り返します:[email protected]@

あるいは正規表現を通して:

  • ものを置き換えます::%s/[fo]+/bar/g

(しかし、注意してください:あなたが後者を行う場合、あなたは2つの問題を抱えるでしょう:)。

23
jqno

私は最近q:を発見しました。それは「コマンドウィンドウ」を開き、あなたの最新の元モード(コマンドモード)コマンドを表示します。ウィンドウ内を通常どおりに移動できます。また、<CR>を押すとコマンドが実行されます。編集などもできます。複雑なコマンドや正規表現をいじっていて、全部を再入力したくない場合、または複雑なものが3つ前のコマンドであった場合は、非常に貴重です。それはbashのset -o viとほとんど同じですが、vim自体のためです(heh!)。

行ったり来たりするためのより興味深い情報については:help q:を参照してください。

23
David Pope

私は先日Vimの完全な完成を発見しました、そして私はそれが何をするのかについて少しぼんやりしていることを認める間、私はどちらかをつぶすだけで驚くほど良い結果を得ました Ctrl + xCtrl + u または Ctrl + n/Ctrl +p 挿入モードそれほどではない IntelliSense 、しかし私はまだそれを学んでいます。

やってみよう! :help ins-completion

22
Svend

これらはショートカットではありませんが、関連しています。

  1. Capslockを追加のESC(またはCtrl)にする
  2. このコマンドを使って、リーダーを "、"(コンマ)にマップします。let mapleader = "、"

彼らは私の生産性を高めます。

20
tfmoraes

私がよく使うもう一つの便利なvi "ショートカット"は 'xp'です。これはカーソルの下の文字を次の文字と交換します。

19
Costyn

ビジュアルモード

他の何人かの人が言っているように、ビジュアルモードはあなたのコピー/カット&ペーストの問題に対する答えです。 Vimはあなたに 'v'、 'V'、そしてC-vを渡します。 vimの小文字の 'v'は、メモ帳のshiftキーと基本的に同じです。いいことは、あなたがそれを抑える必要がないということです。任意の移動方法を使用して、選択範囲の開始点(または終了点)に効率的に移動できます。次に「v」を押して、効率的な移動テクニックをもう一度使用して、選択のもう一方の端に移動します。それから 'd'か 'y'はあなたがその選択を切り取るかコピーすることを可能にする。

VimのビジュアルモードがJim Dennisのviでのカット/コピー/貼り付けの説明より優れている点は、正確な位置を取得する必要がないということです。時にはあなたが行きたい場所のまわりにあなたを得るより複雑な単一の移動コマンドを考え出すよりもあなたが行きたい場所の大体の近くに到達しそしてそれから他の動きでそれを洗練するために速い動きを使うほうが効率的です。

このようにビジュアルモードを広範囲に使用することのマイナス面は、常に使用する松葉杖になる可能性があることです。しかし、もしあなたがvi(m)の新しい側面を学ぶことに非常に積極的であるなら、これはおそらくあなたに大きな影響を与えません。

また、ビジュアルラインとビジュアルブロックモードは、同じテーマのバリエーションを提供します。これは非常に強力な場合があります。特にビジュアルブロックモードです。

キーボードの有効利用について

私はまた、交互の手がキーボードを使う最も速い方法であるというあなたの主張に反対します。それには真実の要素があります。非常に一般的に言えば、同じものを繰り返し使用するのは遅いです。この原則の最も重要な例は、同じ指でタイプされた連続したキーストロークが非常に遅いということです。あなたの主張はおそらく、このパターンでs/finger/hand /変換を使用するという自然な傾向から生じています。ある程度は正しいですが、効率スペクトルの極端な上限では正しくありません。

ピアニストに聞いてください。連続して数枚の音符を交互に手で弾くのか、片手の指を連続して弾くのが速いのかを尋ねます。 4つのキーストロークを入力する最も速い方法は、手を交替させることではなく、昇順または降順で同じ手の4本の指で入力することです(これを「実行」と呼びます)。あなたがこの可能性を考えれば、これは自明のはずです。

もっと難しい問題はこれを最適化することです。キーボード上の絶対距離を最適化するのはとても簡単です。 Vimはそれをします。 「実行」レベ​​ルで最適化することははるかに困難ですが、モーダル編集を使用するvi(m)を使用すると、非モーダルアプローチ(ahem、emacs)よりも可能になります。

Emacsについて

Emacsの熱狂者たちがこの最後の括弧付きのコメントのせいで私の投稿全体を完全に無視しないように、emacsとvimの宗教の違いの根本を説明しなければならないと思います。私はエディタウォーズで話をしたことがないし、またそれをやり直すことはおそらくしないだろうが、私は誰もがこのように違いを説明しているのを聞いたことがないので、ここに行く。違いは次のようなトレードオフです。

Vimはあなたに比類のない生のテキスト編集効率を与えますEmacsはあなたにエディタをカスタマイズしてプログラムする比類のない能力を与えます

盲目のvimの熱狂者たちはvimがスクリプト言語を持っていると主張するでしょう。しかし、それは編集者に役立つように設計された曖昧で特別な言語です。 EmacsにはLISPがあります。十分に言った。これらの最後の2文の意味を理解していない場合、またはその評価を発展させるために関数型プログラミングとLISPについて十分に学びたいという希望がある場合は、vimを使用してください。

Emacsの熱狂者たちは、emacsはviperモードを持っていると主張するでしょう、そしてそれはvimのスーパーセットです。しかし、バイパーモードは標準ではありません。私の理解しているところによると、viperモードはemacsユーザーの大多数には使われていません。これはデフォルトではないので、ほとんどのemacsユーザーはおそらくモーダルパラダイムの恩恵に真の感謝を表明しません。

私の意見では、これらの違いは直交しています。私が述べたように、vimとemacsの利点は両方とも有効であると思います。これは究極の編集者がまだ存在しないことを意味します。 emacsが究極のエディタの基礎となる最も簡単なプラットフォームになるだろうということはおそらく本当でしょう。しかし、モーダル編集はemacsの考え方には根付いていません。 emacsコミュニティは将来的にそのように動くかもしれませんが、それはそれほどありそうもないようです。

それで、あなたが生の編集効率を望むならば、vimを使ってください。スクリプト作成やプログラミングのための究極の環境が欲しいなら、emacsを使ってください。プログラマビリティを重視して両方を使いたい場合は、viperモードのemacsを使用してください(または自分のモードをプログラムしてください)。両方の長所を使いたいのなら、今のところ運が悪いです。

18
user307058

<Ctrl> + W、Vで画面を縦に分割します
<Ctrl> + W、Wはウィンドウ間を移動します

このウィンドウで私が編集しているスクリプトを実行する!python%[args]

任意の行を折り畳むためのビジュアルモードのZF

18
Peter Ellis

30分ほどvimのチュートリアルをやってください(ターミナルでvimの代わりにvimtutorを実行してください)。あなたは基本的な動きといくつかのキーストロークを学ぶでしょう、これはあなたが少なくともあなたが以前に使ったテキストエディタと同じくらい生産的になるでしょう。その後、ジム・デニスの答えをもう一度読んでください。

17
konryd

私はt運動について言及している人が誰もいないことに驚きました。私はdt,yt,の形のパラメータリストでそれを頻繁に使います

16
David Corbin

誰もctagsについて言及していません。 "あふれんばかりのctags"をダウンロードして、あなたが既にあなたの検索パスに持っている狂ったプレインストールされたバージョンの前にそれを置いてください。あなたが取り組んでいるものは何でも根本的にCdです。例えば、Androidカーネルディストリビューションです。 「ctags -R」と入力します。 "tags"という名前のファイルで、そのディレクトリの下にあるソースファイルのインデックスを作成します。これはすべてのタグを含み、言語を規定していないし、ディレクトリのどこにあっても、1つのファイルに入っているので、クロスランゲージ作業は簡単です。

それからそのフォルダでvimを開いて、:help ctagsでいくつかのコマンドを読んでください。私がよく使う数人:

  • メソッド呼び出しにカーソルを置いてCTRL-]と入力すると、メソッド定義に移動します。

  • Ta nameと入力してnameの定義に移動します。

16
Bradjcox

大文字と小文字の区別を無視するには、検索内の任意の場所で\cを使用します(無視またはスマートケースの設定を上書きします)。例えば。 /\cfooまたは/foo\cは、fooFoofOOFOOなどに一致します。

大文字と小文字を区別するには、検索のどこかで\Cを使用してください。例えば。 /\Cfooまたは/foo\Cはfooにのみ一致します。

16
kev

現代の編集者よりも生産的なVimの使い方は何ですか?

非常に少ないキーストロークで(しばしば マクロ を使用して)複雑で反復的な編集を実行できること。 VimGolf を見て、Vimの力を確認してください。

10年以上もの間、ほぼ毎日使用されてきましたが、他のエディタを使用することは想像できません。

16
Johnsyweb

あなたは生産的な近道について尋ねました、しかし私はあなたの本当の質問がそれであると思います:vimはそれの価値がありますか?このスタックオーバーフローの質問に対する答えは - > "はい"です。

あなたは二つのことに気づいたに違いない。 Vimは強力であり、そしてVimは学ぶのが難しいです。その力の大部分は、その拡張性とコマンドの無限の組み合わせにあります。圧倒されないでください。遅くなります。一度に一つのコマンド、一つのプラグイン。無理をしないでください。

あなたがVimに投入したすべての投資は1000倍を返済するでしょう。あなたはあなたが死ぬ前に何時間もの間テキストエディタの中にいることになるでしょう。 Vimがあなたの仲間になります。

14
autodidakto

自動インデント:

gg(文書の先頭に移動します)
=(インデントタイム!)
shift-g(文書の終わりに行く)

.vimrcファイルには 'filetype plugin indent on'が必要で、おそらく適切な 'shiftwidth'と 'expandtab'設定が必要です。

14
David Claridge

複数のバッファ、特に2つのファイルを:bp:bnで比較するためのそれらの間の高速ジャンプ Shift + p または Shift + n

vimdiffモード(2つの垂直バッファーに分割し、違いを示す色を付ける)

でエリアコピー Ctrl + v

そして最後に、識別子のタブ補完( "mosh_tab_or_complete"を検索)。それは人生を変える人です。

13
Stefano Borini

一番上のポスター - :rに同意しました! commandは very 便利です。

ほとんどの場合、これを「貼り付け」に使用します。

:r!cat
**Ctrl-V to paste from the OS clipboard**
^D

こうすれば:set pasteをいじる必要はありません。

12
David Wolever

cit - 挿入モードの遷移でタグの内容を空にする

yit - タグの内容をコピーする

10
Sanek

編集を早くするための3つ目の基準は、必要なキーストローク数です。私はこれがあなたの他の人よりも重要だと思うでしょう2。vimで、ほとんどすべての操作は私がなじみのある他のどのエディタよりも少ないキーストロークしか必要としません。

あなたはあなたがカット&ペーストで問題を抱えていると述べていますが、それはあなたがVimで一般的なモーションコマンドでより多くの経験を必要とするように聞こえます。カーソルから次のセミコロンにyankします。次の最新の検索に移動します。ynこれらはすべて、修飾キーを押しながらマウスで移動するよりもはるかに高速です。また、CMSの応答のいくつかの例に見られるように、vimのモーションコマンドはCとC++のソースコードでの効率的なナビゲーションのために非常に最適化されています。

「私の生産性を高めるためにどのようにvimを使うのですか」という質問に関しては、答えが「効率的」であることを願っています。

10
William Pursell

私の最も生産的なvi/Vimのトリックは:

:%s

ファイル内に必要なものを置き換えるために、その場で正規表現を使用できることが大好きです。すべてのテキストエディタは正規表現IMHOをサポートする必要があります。

10

あなたは置換文字列の中で\ =を使うことができ、私はそれを頻繁にします。

#をマーカーとして使うなど、本質的に番号なしリストがvimにある場合は、それを番号付きリストに変換できます。

# CSSLINT
# PHPCS
# Charlie
# Delta

それが1行目で始まれば、あなたはすることができます

:1,6s/#/\=line(".")/g

に変換する

1 CSSLINT
2 PHPCS
3 Charlie
4 Delta

それが1行目で始まらない場合は、単に数学をしてください。

:16,20s/#/\=line(".") - 15/g

より詳しい情報:help sub-replace-expression

10
kguest

これは私がVimを学ぶのに役立つとわかった別の site です。楽しいよ! :)

VIM Adventures は、VIMのキーボードショートカット(コマンド、動作、および演算子)に基づくオンラインゲームです。それは「ゼルダはテキスト編集を満たしています」ゲームです。 VIMコマンドを練習して記憶するためのパズルゲームです(もちろん、古き良きVIもカバーされています)。急な学習曲線なしでVIMを学ぶのは簡単な方法です。

9
Alex Lockwood

以下を単純なキーコンボにマッピングした後、以下は私にとって非常に便利です。

パスをたどりながらファイルに飛び込む

gf

既存ファイルのフルパス名を取得

:r!echo %:p

既存ファイルのディレクトリを取得

:r!echo %:p:h

実行コード:

:!Ruby %:p

Rubyの略語

ab if_do if end<esc>bi<cr><esc>xhxO
ab if_else if end<esc>bi<cr><esc>xhxO else<esc>bhxA<cr> <esc>k$O
ab meth def method<cr>end<esc>k<esc>:s/method/
ab klas class KlassName<cr>end<esc>k<esc>:s/KlassName/
ab mod module ModName<cr>end<esc>k<esc>:s/ModName/

現在のプログラムを実行します。

   map ,rby :w!<cr>:!Ruby %:p<cr>

現在のプログラムの構文を確認します。

   map ,c :w!<cr>:!Ruby -c %:p<cr>

現在のスペックプログラムのすべてのスペックを実行します。

   map ,s :w!<cr>:!rspec %:p<cr>

それを開きますirb:

   map ,i :w!<cr>:!irb<cr>

rspecの省略:

   ab shared_examples shared_examples_for "behavior here" do<cr>end
   ab shared_behavior describe "description here" do<cr>  before :each do<cr>end<cr>it_should_behave_like "behavior here"<cr><bs>end<cr>
   ab describe_do describe "description here" do<cr>end
   ab context_do describe "description here" do<cr>end
   ab it_do it "description here" do<cr>end
   ab before_each before :each do<cr>end<cr>

Railsの略語:

ユーザ認証:

     ab userc <esc>:r $VIMRUNTIME/Templates/Ruby/c-users.rb<cr>
     ab userv <esc>:r $VIMRUNTIME/Templates/Ruby/v-users.erb<cr>
     ab userm <esc>:r $VIMRUNTIME/Templates/Ruby/m-users.rb<cr>

firefoxで視覚的に選択されたURLを開きます。

"function
   function open_url_in_firefox:(copy_text)
     let g:open_url_in_firefox="silent !open -a \"firefox\" \"".a:copy_text."\""
     exe g:open_url_in_firefox
   endfunction

"abbreviations
   map ,d :call open_url_in_firefox:(expand("%:p"))<cr>
   map go y:call open_url_in_firefox:(@0)<cr> 

rspec:現在の行を含むspecを実行します。

"function
   function run_single_rspec_test:(the_test)
     let g:rake_spec="!rspec ".a:the_test.":".line(".")
     exe g:rake_spec
   endfunction

"abbreviations
   map ,s :call run_single_rspec_test:(expand("%:p"))<cr>

rspec-Rails:現在の行を含むスペックを実行します。

"function
   function run_single_Rails_rspec_test:(the_test)
     let g:rake_spec="!rake spec SPEC=\"".a:the_test.":".line(".")."\""
     exe g:rake_spec
   endfunction

"abbreviations
   map ,r :call run_single_Rails_rspec_test:(expand("%:p"))<cr>

rspec-Rails:現在の行を含むspecをデバッグしながら実行します。

"function
   function run_spec_containing_current_line_with_debugging:(the_test)
     let g:rake_spec="!rake spec SPEC=\"".a:the_test.":".line(".")." -d\""
     exe g:rake_spec
   endfunction

"abbreviations
   map ,p :call run_spec_containing_current_line_with_debugging:(expand("%:p")) <cr>

html

"abbreviations

  "ab htm <html><cr><tab><head><cr></head><cr><body><cr></body><cr><bs><bs></html>
   ab template_html <script type = 'text/template' id = 'templateIdHere'></script>
   ab script_i <script src=''></script>
   ab script_m <script><cr></script>
   ab Tpage <esc>:r ~/.vim/templates/pageContainer.html<cr>
   ab Ttable <esc>:r ~/.vim/templates/listTable.html<cr>

"function to render common html template

   function html:() 
     call feedkeys( "i", 't' )
     call feedkeys("<html>\<cr>  <head>\<cr></head>\<cr><body>\<cr> ", 't')
     call feedkeys( "\<esc>", 't' )
     call feedkeys( "i", 't' )
     call include_js:()
     call feedkeys("\<bs>\<bs></body>\<cr> \<esc>hxhxi</html>", 't')
   endfunction

ジャバスクリプト

"jasmine.js
  "abbreviations
   ab describe_js describe('description here', function(){<cr>});
   ab context_js context('context here', function(){<cr>});
   ab it_js it('expectation here', function(){<cr>});
   ab expect_js expect().toEqual();
   ab before_js beforeEach(function(){<cr>});
   ab after_js afterEach(function(){<cr>});

"function abbreviations

   ab fun1 function(){}<esc>i<cr><esc>ko
   ab fun2 x=function(){};<esc>hi<cr>
   ab fun3 var x=function(){<cr>};

"method for rendering inclusion of common js files

   function include_js:()
     let includes_0  = "  <link   type = 'text\/css' rel = 'stylesheet' href = '\/Users\/johnjimenez\/common\/stylesheets\/jasmine-1.1.0\/jasmine.css'\/>"
     let includes_1  = "  <link   type = 'text\/css' rel = 'stylesheet' href = '\/Users\/johnjimenez\/common\/stylesheets\/screen.css'\/>"
     let includes_2  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jquery-1.7.2\/jquery-1.7.2.js'><\/script>"
     let includes_3  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/underscore\/underscore.js'><\/script>"
     let includes_4  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/backbone-0.9.2\/backbone.js'><\/script>"
     let includes_5  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jasmine-1.1.0\/jasmine.js'><\/script>"
     let includes_6  = "<script type = 'text\/javascript' src = '\/Users\/johnjimenez\/common\/javascripts\/jasmine-1.1.0\/jasmine-html.js'><\/script>"
     let includes_7  = "<script>"
     let includes_8  = "  describe('default page', function(){ "
     let includes_9  = "it('should have an html tag', function(){ "
     let includes_10 = "  expect( $( 'head' ).html() ).not.toMatch(\/^[\\s\\t\\n]*$\/);"
     let includes_11  = "});"
     let includes_12 = "});"
     let includes_13 = "$(function(){"
     let includes_14 = "jasmine.getEnv().addReporter( new jasmine.TrivialReporter() );"
     let includes_15 = "jasmine.getEnv().execute();"
     let includes_16 = "});"
     let includes_17 = "\<bs>\<bs><\/script>"

     let j = 0

     while j < 18
       let entry = 'includes_' . j
       call feedkeys( {entry}, 't' )
       call feedkeys( "\<cr>", 't' )
       let j = j + 1
     endwhile

   endfunction

"jquery

  "abbreviations

     ab docr $(document).ready(function(){});
     ab jqfun $(<cr>function(){<cr>}<cr>);
9
kikuchiyo
Ctrl-w Ctrl-f ............ open file under cursor in new window
Ctrl-6 ................... alternate file
'0 ....................... open last file
:x ....................... close if save
7
SergioAraujo

コードの一部にテキストを挿入する:

ctrl + v, (selecting text on multiple lines), I, (type something I want), ESC

テキストを編集してN回実行するためのマクロを記録する:

q, a (or some other letter), (do the things I want to record), q, ESC,
(type N, as in the number of times I want to run the macro), @, a
7
Vesa Nieminen

少しの間質問を無視します(私の答えは下にあります)、vimの問題に役立ついくつかのこと:

:map <C-F> /\V

これにより、Ctrl-Fが検索を開始し、検索の最初の文字が\Vになり、すべての「マジック」がオフになるため、何もエスケープする必要がありません(PsPadのように)。

" CTRL-X and SHIFT-Del are Cut
vnoremap <C-X> "+x
vnoremap <S-Del> "+x

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y

" CTRL-V and SHIFT-Insert are Paste
map <C-V>       "+gP
map <S-Insert>      "+gP

cmap <C-V>      <C-R>+
cmap <S-Insert>     <C-R>+

(Vimディストリビューションからmswin.vimから直接取得)。これにより、コピーと貼り付けのためにCtrl-C、Ctrl-Vなどが与えられます。

個人的には、標準のVimではコピーと貼り付けがはるかに優れていると感じています。 Vimでは、カーソルを行に置くことができ、yyと入力してコピーし、10pと入力して10個のコピーを貼り付けます。 Align プラグインを使用すると、Ctrl-V(上記のウィンドウマッピングが使用されていない場合)を使用して、作成された数字の列を視覚的にブロック選択できます。 :IIその後、数値の列を自動インクリメントします。同様に、 YankRing を使用すると、10行(またはそれ以上)を次々とコピーして、次々に貼り付けることができます。

Vimが私をより生産的にする方法に関しては、tagsファイルは、これなしではできなかった1つのことだと思います。カーソルがタグの上にあるとき、Ctrl-]を押して関数に移動し(Ctrl-Tを押して好きなだけレベルを返します)、,pを押して関数またはマクロの定義を開きます(プレビューウィンドウ(:pclですぐに閉じることができます)または[iでステータスバーにマクロ定義を表示するだけです。複雑なソースコードをナビゲートするために、これらのツールは非常に貴重です。

ただし、プレビューウィンドウは.vimrcのマッピングに依存します。

:map ,p :ptag <C-R><C-W><CR>

タグファイルでは、エラーをより明確に示す構文の強調表示(認識されたタグを強調表示し、認識されていないタグを強調表示しない)および タグ署名 を移動するときに、いくつかの(私の)プラグインを使用できますキーワードの上にマウスを置きます。

7
DrAl

http://www.viemu.com/a-why-vi-vim.html は良い提唱記事です。それは使用の力を説明します . 最後の編集を繰り返すためのコマンド。

コピー/カット&ペースト私はいつもやります。すべての古典的なエディタでは、左手でShiftキーを押しながらテキストを選択するために右手でカーソルを動かします。 Ctrl + Cキーを押してカーソルを移動し、Ctrl + Vキーを押します。

Vimではそれは恐ろしいことです。

* yy to copy one line (you almost never want the whole line!)
* [number xx]yy to copy xx lines into the buffer. But you never know

あなたが欲しいものを選択したのとまったく同じです。元に戻すには[number xx] ddしてからuを実行する必要があります。

私は他の答えがよりよく説明したと確信しています、しかしあなたは間違っています。私はよくビジュアルモードを使用してヤンクや削除するテキストを選択します。これはあなたのshift + selectの例に似ていますが、ここではVimには明らかに利点があります。 yyはすばらしいコマンドですが、1行全体をヤンクしたい場合は、代わりにVyを使用することがよくあります。

6
Dan Olson

コピー/切り取りと貼り付け特にビジュアルモードを使用すると、他のエディタからの適応がはるかに簡単になります。だから私は通常カットアンドペーストする方法は次のとおりです。

  • Esc - 挿入モードを終了します(すでにノーマルモードに入っている場合はスキップします)。
  • v - ビジュアルモードをオンにする
  • ファイルを移動して必要なテキストを選択します。ビジュアルモードでは選択した文字が表示されます。いくつかの単語ではwebが便利です(それぞれ次のWordの先頭、次のWordの末尾、この/前のWordの先頭に移動する)。
  • d - テキストを切り取ります(テキストをコピーする場合はyを使用してください)
  • テキストを配置したい場所に移動します。
  • p - 貼り付け(これは現在の文字の後に貼り付け、Pは現在の文字の前に貼り付けます。

Vを使用してビジュアルモード(line)に入ることもできます。カーソルがその行にある場合は、自動的に行全体が選択されます。

6
Hamish Downer

さらなるショートカットのショートカットはどうですか。


あなたの.vimrcに入れてください:
noremap; :

この方法でcommmandmodeを入力するのは簡単です。;qまたは;wが動作し、代わりに:qまたは:wが動作します。

3つではなく2つのキーストロークで、これが非常に頻繁に必要になります。


sysadminsには悪い 、どこのボックスでも同じであるためには、箱から出して同じ機能を提供する必要がある。

しかし、 _巨大な_ プログラマのための改善 viを使う。

5
sjas

実際、私はいつもバッファを失っていたので、私が通常ある範囲の行をコピーする方法はそれを一時ファイルに書いてからそれを適切な場所に読み込むことです。

例えば.

ka(マークを設定)

'、 w! t(マークからすべてをファイルtにコピーする)

カーソルを動かします.

:.r t(tを現在の場所に読み込む).

これはおそらくバッファを使うよりもキーストロークが少なくて済み、追跡するのがより簡単で、そしてあなたは長い間存続しているペーストファイルを持つことができます。私はスピードのために、通常ファイルに1文字の名前を使います。

これが速い主な理由は、カーソルを自分の周りに移動させるには、検索機能 "/"を使用し、目的の場所に到達する前に別のパターンの出現に遭遇した場合は "n"を使用することです。

5
Larry Watanabe

あなたはレジスタの内容を検索することができます。

あなたのレジスタxに次のものが含まれているとします。

検索する文字列

この文字列を検索するには、通常モードで入力する必要があります
/CTRL-rxENTER

xレジスタの内容を貼り付けます。

4
Luc M

Viのgrokkingについてのすばらしい返信に加えて、vim doesがviコマンドをより使いやすくするいくつかの非常にviに似た機能を追加することに注意する必要があります。最初に思い浮かぶのはテキストオブジェクトです。現在の段落を再フォーマットする{!}fmtの代わりに、!apfmtは同じことを行います。最初に、現在のparagraphであるaテキストオブジェクトを選択することを指定することで機能します。同様に、現在の文字列リテラルを変更するには(例としてfoobarに)、T"ct"barの代わりに(前の"の直後に移動し、change次の"の直前まで、bar)を挿入し、ci"bar:と言うことができます:(最も内側の)引用符の変更、barの挿入。

移動コマンドではなくテキストオブジェクトの観点から考えるのは非常に良いことです。

4
wolverian

たくさんのvimのトリックがありますが、今のところ、私が本当に楽しんでいるのは Ctrl+A 私はたまたまいくつかのst ** dコードをハードコードする配列インデックスを扱っているので。

3
lang2

一連のvimコマンドggVGg?は、現在の文書のテキストにRot13暗号を適用します。

Gung vf zl zbfg cebqhpgvir fubegphg fvapr V nyjnlf glcr va Ebg13。

3
cytinus

行のクイックカットおよび上書き部分:

行を編集する際の非常に一般的なタスクは、現在のカーソル位置から特定の場所まで切り取り、新しいコンテンツを上書きすることです。

次のコマンドを使用できます。

ct<identifier>前方切断用。

cT<identifier>後方カット用。

切り取りたい行の文字はどこにありますか。

例:これを編集したい行であり、カーソルがIにあるとしましょう。

Hi There. I am a Coder and I code in : Python and R

:まで切り取り、I am a programmerで上書きしたい場合は、ct:と入力し、I am a programmerと入力します。これにより、Hi There. I am a programmer: Python and Rが生成されます。

行のクイック削除部分:

上記のように、次のコマンドは現在のカーソル位置から「識別子」までコンテンツを削除します

dt<identifier>前方削除

dT<identifier>後方削除用

これがあなたにも役立つことを願っています。

2
dabsingh
1
David Lam

私の.vimrcのnnoremap q; q:は、複雑な検索と置換を作成するときの流れを維持します。

0
sjas