他の列を変更せずに列を並べ替える


10

私は最近フィルター!技術に気づいていて、それが大好きです。残念ながら、ビジュアルブロックモードでは使用できません。ここの専門家が私を助けてくれることを願っています。

基本的に、下の3番目の列(MWEのみ)などの列をインプレースで並べ替えたいです。また、並べ替えの際に他の列に影響を与えたくありません。

ユーティリティ!sort使用して、視覚的に(ブロックモードで)選択した3番目の列をフィルター()しようとしました。しかし、ソートはむしろ選択範囲を超えています。つまり、選択だけでなく、すべての行が入れ替えられ、最初の列に基づいてソートされます。

1.  LARGEST         40
2.  SECOND-LARGEST  168     
3.  MID             2.8     
4.  MID             540     
5.  MID             14.84   
6.  MID             40      
7.  SECOND-LEAST    64      
8.  LEAST           8

私はビジュアルブロックを使用して最後の列を選択し、次のよう!sort --reverseに表示されると言いました

'<,'>!sort --reverse

そして、その結果は私が期待したものとは正反対です。結果には、1つの列だけでなく、行全体が並べ替え/入れ替えられています。これも、3番目の列の選択に関係なく、最初の列に基づいています。

 8.  LEAST           8    
 7.  SECOND-LEAST    64      
 6.  MID             40      
 5.  MID             14.84   
 4.  MID             540     
 3.  MID             2.8     
 2.  SECOND-LARGEST  168     
 1.  LARGEST         40   

そうでなければ不可能でない限り、sed/ などの比較的高度なツールではなく、純粋なvim + sortソリューションが欲しいawkです。言うまでもなく、ビジュアルモードに比べて、ビジュアルブロックモードがどの程度制限されているかを知ることが重要です。


これはあなたの問題を解決しませんが、sort利用可能なvim内部コマンドがあるので!sort、通常のソートを行うために外部を呼び出す必要がないことに注意してください。
Dalker、

2
フィルターは行でのみ機能します
romainl 2016年

@ダルカーうん、ありがとう。しかし、私はすでにそれを試しました、それは同じような結果を与えました。
2016

@romainlあれ?希望の光線はありませんか?それがVimで起こっていることはめったにありません!! しかし、それでも、何かを選択し、出力まで問題の兆候がなかった後、「フィルターは行でのみ機能する」と言っても不思議ではありませんか?警告/エラーが表示されない場合、それはバグであるとさえ主張します。
2016

バグ?ははは。動作は文書化されている(:help filter)だけでなく、標準化されています(申し訳ありませんが、そのPOSをディープリンクする方法がわかりません)。RFTMを使用しない場合、文句を言うことはできません。
romainl 2016年

回答:


9

あなたの最善の希望はvis.vimプラグインだと思います。このプラグインは、コマンドBをブロックに適用できるコマンドを提供します。

ここで、プラグインをインストールした後、ブロックを選択して使用します。

:'<,'>B !sort

コマンドは何もすることができ、その代わりのことに注意!sortします(別のファイルに保存するようにブロックの上に他の処理の多くを行うことができます:'<,'>B w foo.txt()または置換を適用します:'<,'>B s/foo/bar/g


1
@LovesProbability、最初の2つの列を変更せずに3番目の列をソートしようとしている場合、このスレッドが役立ちます。
JairLópez16年

@JairLópez気分を害することなく、私の質問が誰かによってどこか他の場所にコピーされ、元のソース(つまり、この回答の言い換えコピーの横にあるこのページ)に戻るように求められたのは本当におかしいあなたは私にそこで答えを見つけに行くように頼みます。
確率が大好き2016年

コメントをありがとうございます。なぜなら、(1)質問とこの回答の両方が興味深いものだったからです。(2)多分あなたは一人ではなく、もっと多くの人が興味を持っているかもしれません。(3)これは、$ブロックごとのビジュアルモードでの使用方法を理解するのに役立つ素晴らしい機会です。
JairLópez16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.