vimテクニック実戦-マクロ記録の一例について

15551 ワード

まあ、vimは効率がいいと言われていますが、いったいどこが高いのでしょうか.
両手をメインキーボードエリアから離す必要はないと言われています.の
Exモードが一番便利だと言われています..
vimrcのプログラマブル性能は簡単で使いやすいと言われています...
このすべてがVimを勝てなくなり、水深火熱のユーザーたちに「無敵」の安心感を与えた.
今日は初心者のステップアップのテクニックであるマクロ記録を共有します.
マクロ記録とは、vimが実行した操作シーケンスを記録し、記録が完了した後の任意の時間(Normalモード)にこの操作フローを1キーで繰り返すことができます.北通ゲームハンドルの「1キー大技」機能を使用しますか?これだよ、へへ.
マクロの使い方は簡単です.Normalモードでqを押して任意のアルファベット(マクロをマークするために使用)を加えるとマクロの録画が開始され、録画が完了したらqが終了を示す(つまりマクロがネストできないことを意味し、マクロを通じてマクロを生成したい学生は行ってもいい).マクロ使用@をトリガーし、例えばqaで録画した大きな技(名詞をむやみに変えないでね!!)、@aでトリガできます.
プロセス中にマクロをネストできない以外は、q!あるいはZZなど、その他の操作は記録可能です.
Ok、原理的なことは終わりました.牛迫はこんなに簡単です.実戦例を見てみましょう.
すなわち、プログラムのすべての構成パラメータを格納するクラスがあります.中にはint,bool,IPEndPointなど変数がたくさんあります.
それから私は九牛二虎の力を使ってLoad関数を書いて、このクラスの値をGUIの上に運ぶことができます.の
危険な動作は真似しないでください.この関数を実現すると、精神的にイライラしたり、猫が殺されたり、キーボードが切れたりするなどの異常が発生します.練習するなら、直接コピーしてもいいです.
        public void LoadFromYadliConfig()
{
//Application

currentRunningModeBox.SelectedIndex = ( int ) YadliConfig.CurrentRunningMode;
ReadonlyDatabaseBox.Checked = YadliConfig.ReadonlyDatabase;
ReadSlaveListFromConfBox.Checked = YadliConfig.ReadSlaveListFromConf;
ExperimentalFeatureOnBox.Checked = YadliConfig.ExperimentalFeatureOn;
CompatibleMessageModeBox.Checked = YadliConfig.CompatibleMessageMode;
IsStandaloneServerBox.Checked = YadliConfig.IsStandaloneServer;

//Network

ClientBufferSizeBox.Text = YadliConfig.ClientBufferSize.ToString();
ClientMaxBufferSizeBox.Text = YadliConfig.ClientMaxBufferSize.ToString();
ServerSocketBufferSizeBox.Text = YadliConfig.ServerSocketBufferSize.ToString();
ClientSocketBufferSizeBox.Text = YadliConfig.ClientSocketBufferSize.ToString();
ClientMaxConnBox.Text = YadliConfig.ClientMaxConn.ToString();
BacklogBox.Text = YadliConfig.BackLog.ToString();
ServerMaxConnBox.Text = YadliConfig.ServerMaxConn.ToString();
ServerMaxAcceptOpsBox.Text = YadliConfig.ServerMaxAcceptOps.ToString();

//Protocol

bbServerBox.Text = YadliConfig.BlackboardServer;
bbPortBox.Text = YadliConfig.BlackboardPort.ToString();
RGraphPortBox.Text = YadliConfig.RGraphPort.ToString();
slavePortBox.Text = YadliConfig.SlavePort.ToString();
YadliProxyPortBox.Text = YadliConfig.YadliProxyPort.ToString();
AggregatorPortBox.Text = YadliConfig.AggregatorPort.ToString();

//Slaves

slaveListBox.Items.Clear();
slaveListBox.BeginUpdate();
foreach ( IPEndPoint ipe in YadliConfig.SlaveList )
{
slaveListBox.Items.Add( ipe.Address.ToString() + ":" + ipe.Port );
}
slaveListBox.EndUpdate();

//Storage

MemoryPoolSizeBox.Text = YadliConfig.MemoryPoolSize.ToString();
MemoryTrunkIncrementSizeBox.Text = YadliConfig.MemoryTrunkIncrementSize.ToString();
IndexMemoryTrunkSizeBox.Text = YadliConfig.MemoryTrunkIncrementSize.ToString();
StorageRootBox.Text = YadliConfig.StorageRoot;

//Internal

UseYadliStarterBox.Checked = YadliConfig.UseYadliStarter;
QueryAggregatorOnBox.Checked = YadliConfig.QueryAggregatorOn;
CellCacheOnBox.Checked = YadliConfig.CellCacheOn;
ReadonlyCellLoadBox.Checked = YadliConfig.ReadonlyCellLoad;
CreateConnectionWhenUnavailableBox.Checked = YadliConfig.CreateConnectionWhenUnavailable;
NeighborAsListBox.Checked = YadliConfig.NeighborAsList;
RGraphOnBox.Checked = YadliConfig.RGraphOn;
GraphBufferSizeBox.Text = YadliConfig.GraphBufferSize.ToString();
XHashSetGroupSizeBox.Text = YadliConfig.XHashSetGroupSize.ToString();
DebugBox.Checked = YadliConfig.Debug;
OneBoxTestBox.Checked = YadliConfig.OneBoxTest;

}

そしてGUIではHighが足りているので、どうしても値をダウンロードしなければなりません...この時は「もう何もしたくないよ!!」の感じは?
怖がらないで!このような时、あなたは考えるべきです——実はあなたは“1ボタンの大きい技”の技能があります!
 
問題を分析します.LoadFromYadliConfig()で、YadliConfigの変数をGUIのコントロールに割り当てました.今は実は等号の両側のものを反転させなければなりません.
上の部分をvimにコピーします.
最初の行にナビゲートします.
qa
カーソルの後ろには「currentRunningModeBox.SelectedIndex=(int)YadliConfig.CurrentRunningMode;」そうだね
この時点でNormalモードになるはずです.
キー/=を押して車に戻り、等号を見つけます
x等号を削除
d$現在のカーソルから末尾までの内容をクリップボードに入れる
0回行ヘッダー
p接着
xセミコロンを消す
i=Esc等号を挿入し、Normalモードに戻る
$i;Escジャンプ行末にセミコロンを挿入し、Normalモードに戻る
q記録を終了する.
それから、全部で何行あるか数えなければなりません.30を仮定しましょう.(有効行の数、空行などは計算されません.)
30 @a a大技を30回繰り返す
パチ、等号くらいは全部入れ替わりました.あなたは得ました:
            //Application

( int ) YadliConfig.CurrentRunningMode= currentRunningModeBox.SelectedIndex;
YadliConfig.ReadonlyDatabase= ReadonlyDatabaseBox.Checked;
YadliConfig.ReadSlaveListFromConf= ReadSlaveListFromConfBox.Checked;
YadliConfig.ExperimentalFeatureOn= ExperimentalFeatureOnBox.Checked;
YadliConfig.CompatibleMessageMode= CompatibleMessageModeBox.Checked;
YadliConfig.IsStandaloneServer= IsStandaloneServerBox.Checked;

//Network

YadliConfig.ClientBufferSize.ToString()= ClientBufferSizeBox.Text;
YadliConfig.ClientMaxBufferSize.ToString()= ClientMaxBufferSizeBox.Text;
YadliConfig.ServerSocketBufferSize.ToString()= ServerSocketBufferSizeBox.Text;
YadliConfig.ClientSocketBufferSize.ToString()= ClientSocketBufferSizeBox.Text;
YadliConfig.ClientMaxConn.ToString()= ClientMaxConnBox.Text;
YadliConfig.BackLog.ToString()= BacklogBox.Text;
YadliConfig.ServerMaxConn.ToString()= ServerMaxConnBox.Text;
YadliConfig.ServerMaxAcceptOps.ToString()= ServerMaxAcceptOpsBox.Text;

//Protocol

YadliConfig.BlackboardServer= bbServerBox.Text;
YadliConfig.BlackboardPort.ToString()= bbPortBox.Text;
YadliConfig.RGraphPort.ToString()= RGraphPortBox.Text;
YadliConfig.SlavePort.ToString()= slavePortBox.Text;
YadliConfig.YadliProxyPort.ToString()= YadliProxyPortBox.Text;
YadliConfig.AggregatorPort.ToString()= AggregatorPortBox.Text;

//Slaves

slaveListBox.Items.Clear();
slaveListBox.BeginUpdate();
foreach ( IPEndPoint ipe in YadliConfig.SlaveList )
{
slaveListBox.Items.Add( ipe.Address.ToString() + ":" + ipe.Port );
}
slaveListBox.EndUpdate();

//Storage

YadliConfig.MemoryPoolSize.ToString()= MemoryPoolSizeBox.Text;
YadliConfig.MemoryTrunkIncrementSize.ToString()= MemoryTrunkIncrementSizeBox.Text;
YadliConfig.MemoryTrunkIncrementSize.ToString()= IndexMemoryTrunkSizeBox.Text;
YadliConfig.StorageRoot= StorageRootBox.Text;

//Internal

YadliConfig.UseYadliStarter= UseYadliStarterBox.Checked;
YadliConfig.QueryAggregatorOn= QueryAggregatorOnBox.Checked;
YadliConfig.CellCacheOn= CellCacheOnBox.Checked;
YadliConfig.ReadonlyCellLoad= ReadonlyCellLoadBox.Checked;
YadliConfig.CreateConnectionWhenUnavailable= CreateConnectionWhenUnavailableBox.Checked;
YadliConfig.NeighborAsList= NeighborAsListBox.Checked;
YadliConfig.RGraphOn= RGraphOnBox.Checked;
YadliConfig.GraphBufferSize.ToString()= GraphBufferSizeBox.Text;
YadliConfig.XHashSetGroupSize.ToString()= XHashSetGroupSizeBox.Text;
YadliConfig.Debug= DebugBox.Checked;
YadliConfig.OneBoxTest= OneBoxTestBox.Checked;

 
Ok、成功から遠くない.
次の質問、ToString()は、int.Parseに変換する方法を考えます.
 
qbはQドルを記録します(...)
//.ToString()リターン位置決めToString()
xdwxx削除ToString()
l等号スキップ
iint.Parse(前半を挿入...
$i)後半を挿入します...
esc
Qドルの録画に成功しました.
次に、上記の例を真似してみましょう.
            //Application

YadliConfig.CurrentRunningMode=(RunningMode) currentRunningModeBox.SelectedIndex;
YadliConfig.ReadonlyDatabase= ReadonlyDatabaseBox.Checked;
YadliConfig.ReadSlaveListFromConf= ReadSlaveListFromConfBox.Checked;
YadliConfig.ExperimentalFeatureOn= ExperimentalFeatureOnBox.Checked;
YadliConfig.CompatibleMessageMode= CompatibleMessageModeBox.Checked;
YadliConfig.IsStandaloneServer= IsStandaloneServerBox.Checked;

//Network

YadliConfig.ClientBufferSize=int.Parse( ClientBufferSizeBox.Text);
YadliConfig.ClientMaxBufferSize=int.Parse( ClientMaxBufferSizeBox.Text);
YadliConfig.ServerSocketBufferSize=int.Parse( ServerSocketBufferSizeBox.Text);
YadliConfig.ClientSocketBufferSize=int.Parse( ClientSocketBufferSizeBox.Text);
YadliConfig.ClientMaxConn=int.Parse( ClientMaxConnBox.Text);
YadliConfig.BackLog=int.Parse( BacklogBox.Text);
YadliConfig.ServerMaxConn=int.Parse( ServerMaxConnBox.Text);
YadliConfig.ServerMaxAcceptOps=int.Parse( ServerMaxAcceptOpsBox.Text);

//Protocol

YadliConfig.BlackboardServer= bbServerBox.Text;
YadliConfig.BlackboardPort=int.Parse( bbPortBox.Text);
YadliConfig.RGraphPort=int.Parse( RGraphPortBox.Text);
YadliConfig.SlavePort=int.Parse( slavePortBox.Text);
YadliConfig.YadliProxyPort=int.Parse( YadliProxyPortBox.Text);
YadliConfig.AggregatorPort=int.Parse( AggregatorPortBox.Text);

//Slaves

slaveListBox.Items.Clear();
slaveListBox.BeginUpdate();
foreach ( IPEndPoint ipe in YadliConfig.SlaveList )
{
slaveListBox.Items.Add( ipe.Address int.Parse(+ ":" + ipe.Port );
}
slaveListBox.EndUpdate();

//Storage

YadliConfig.MemoryPoolSize=int.Parse( MemoryPoolSizeBox.Text);
YadliConfig.MemoryTrunkIncrementSize=int.Parse( MemoryTrunkIncrementSizeBox.Text);
YadliConfig.MemoryTrunkIncrementSize=int.Parse( IndexMemoryTrunkSizeBox.Text);
YadliConfig.StorageRoot= StorageRootBox.Text;

//Internal

YadliConfig.UseYadliStarter= UseYadliStarterBox.Checked;
YadliConfig.QueryAggregatorOn= QueryAggregatorOnBox.Checked;
YadliConfig.CellCacheOn= CellCacheOnBox.Checked;
YadliConfig.ReadonlyCellLoad= ReadonlyCellLoadBox.Checked;
YadliConfig.CreateConnectionWhenUnavailable= CreateConnectionWhenUnavailableBox.Checked;
YadliConfig.NeighborAsList= NeighborAsListBox.Checked;
YadliConfig.RGraphOn= RGraphOnBox.Checked;
YadliConfig.GraphBufferSize=int.Parse( GraphBufferSizeBox.Text);
YadliConfig.XHashSetGroupSize=int.Parse( XHashSetGroupSizeBox.Text);
YadliConfig.Debug= DebugBox.Checked;
YadliConfig.OneBoxTest= OneBoxTestBox.Checked;

それから、一部の大きな技が定まらないところを修理して、indentプログラムに伝えてやってみると、基本的に成功しました.
一瞬にして無敵な感じがしたのではないでしょうか.
ここまで話しましょう.幸運を祈ります.:-)