2012-10-03 48 views
2

我想用命令在命令行中打開vim中的多個文件。出於某種原因,我正在接受一個錯誤,你會在下面看到。用find命令在文本編輯器中打開多個文件

$ find . -name edit.html.erb \ 
    | perl -pi -e 's/^..//' \ 
    | perl -pi -e 's/\n$/ /' \ 
    | vim 

當我運行它沒有 「| VIM」 在此命令:

$ find . -name edit.html.erb \ 
    | perl -pi -e 's/^..//' \ 
    | perl -pi -e 's/\n$/ /' 

並獲得此輸出:

addresses/edit.html.erb claims/edit.html.erb emails/edit.html.erb owners/edit.html.erb packages/edit.html.erb users/edit.html.erb vessels/edit.html.erb voyages/edit.html.erb % 

我得到,可能有事情做了錯誤在輸出結尾處顯示「%」標記。

這裏是輸出和錯誤:

Vim: Warning: Input is not from a terminal 
Vim: Error reading input, exiting... 
Vim: preserving files... 
Vim: Finished. 

我該如何解決這個問題?由於我是新手,不確定哪些部件導致錯誤,但任何幫助將不勝感激!

+0

你到底想幹什麼? – ikegami

+0

是不是''你的提示,不是輸出的一部分? – ikegami

+0

是的,這是我的提示。 (或者當我使用sed時,至少會發生同樣的事情)。我試圖在rails項目中打開所有的編輯視圖,因爲我需要爲它們添加一些東西。因此,該查找首先篩選出我的選擇。 – ovatsug25

回答

9

你作爲鍵盤輸入傳遞文件的內容。我認爲你想要做的是打開文件vim。我不知道vim,但通常通過傳遞文件名作爲參數來實現。

在bash中,應當使用:

vim $(find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /') 

(刪除了廢話使用-i。)

其實,改變的換行符爲空格是沒用的,所以是除去最主要的./,因此,所有你需要的是:

vim $(find . -name edit.html.erb) 
3

讓我們看看到文檔VIM:

SYNOPSIS 
    vim [options] [file ..] 
    vim [options] - 
    vim [options] -t tag 
    vim [options] -q [errorfile] 

這就告訴我們,我們可以指定文件名地段作爲命令行參數,並-標誌着「文件」將STDIN被加載。但這不是文件名,而是緩衝區內容!

讓你的Perl腳本exec進入帶有正確參數的vim。

exec "vim", @filenames; 

或類似的。這將使您的工具鏈

$ find . -name edit.html.erb \ 
    | perl -pi -e 's/^..//' \ 
    | perl -ne 'chomp; push @files, $_; }{ exec "vim", @files' 

(難道你真的確定你要刪除的文件名的前兩個字符?這就是s/^..//一樣。逃生點,以匹配文字.

+0

不完全熟悉,但我會嘗試弄清楚它!你認爲這可以從命令行完成嗎? – ovatsug25

+0

是的。我不想刪除前兩個字符,因爲find的輸出如下所示:「./path/to/file」,因此無法打開。 PS。 「有用!」 – ovatsug25

3

管道進入標準輸入vim不會做任何事情(無論如何都不會有幫助)。你想傳遞命令行參數,而不是輸入。在bash中,對此使用反引號或$(...)語法。

vim `find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /'` 
vim $(find . -name edit.html.erb | perl -pe's/^..//' | perl -pe's/\n$/ /') 

(該-i選項Perl中沒有做任何事情在這裏,無論是。這個選項用於文件的「就地」編輯,當你在命令行上提供的文件名)。

1

不要忘了二次OS:VIM

:args `find . -name edit.html.erb` 
:argadd `find . -name edit.html.js` 

甚至

:args **/edit.html.erb 

(參見:argdelete,:ARGS,:argdo等)

(其他的答案几乎擊敗了其他路徑調用某些文件名參數VIM)

相關問題