2010-04-09 95 views
38

我想在Vim中獲得沒有文件擴展名的文件名。在Vim函數中獲取沒有文件擴展名的文件名。

我在我的.vimrc文件中編寫了以下函數來編譯和運行Java程序。

:function! JAVA_RUN() 
:!javac %^M 
:endfunction 

map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR> 

在這方面的功能我怎麼能得到擴展名的文件名。

+0

你不必爲此做一個函數'(地圖:!java%:r )' – yesennes 2015-09-09 02:58:31

回答

75

:help expand()應該給你答案,見expand()

您應該對%使用r修飾符,用%:r而不是%來獲取沒有擴展名的文件名。

如果要編寫構建和執行文件的函數,還應該查看shellescape的文檔,以防止文件名或路徑中的空格出現問題。

+0

非常感謝!用它作爲一種簡單的方法來轉換當前文件格式而不用跳出vim。 – Jason 2011-08-16 19:38:37

+0

'%:r'和'%<'有區別嗎? – nggit 2017-06-08 01:58:44

+0

是的,但它很微妙。 '%<'仍然支持與3.0的向後兼容性,並且與'%:r'等效。 ':r'形式是首選。它可以與其他修飾符結合使用,也可以多次使用,例如,如果您有多個擴展名,例如'.tar.gz'。 – tonio 2017-06-08 09:07:07

4

我從字面上只是讀了一個類似的問題(因爲別人似乎試圖配置vim爲他們用F鍵自動構建),並且寫了an answer關於如何利用vim的功能:make命令,甚至不需要編寫Makefile。就你而言,它與問題沒有直接關係,但我想我會提及它,以防你感興趣。

此外,有人似乎寫了Vim Tips Wiki關於如何設置vim的:make命令來專門處理用螞蟻構建的Java項目。我有一段時間沒有和Java一起工作過,但在你的情況下,特別是它可能是一個開始的好地方。

0

如果你想exand的文件名(比%等其他)看看fnamemodify()

fnamemodify({fname}, {mods})    *fnamemodify()* 
     Modify file name {fname} according to {mods}. {mods} is a 
     string of characters like it is used for file names on the 
     command line. See |filename-modifiers|. 

fnamemodify("main.java", ":r")回報main

0

我來到這裏尋找類似問題的答案。我希望能夠從正在編輯的java文件中提取當前的類名稱。我發現了一個很巧妙的方法利用縮寫做到這一點在vim:這個工作

ab xclass <C-R>=expand('%:t:r')<CR> 

把這行放到你的.vimrc(或類似)。一旦您按下空格,縮寫將自動觸發,因此我通常在它們前加'x'以避免其意外擴展。

這裏的訣竅是:t:rexpand()的參數中的組合。 %是「當前文件名」,:t僅選擇所有路徑(「僅限最後一個路徑組件」)並且僅選擇012ot(「刪除了一個擴展名」)t。 (報價部分均來自expand()文件。)

所以,當你在文件/a/b/ClassIAmAboutToCreate.java創建一個新的類,你可以鍵入:

public class xclass { 

你「xclass」後按下空格鍵的那一刻,縮寫將擴展爲public class ClassIAmAboutToCreate,這正是你需要。

另外,注意的縮寫可以通過按下Ctrl鍵+]這避免了插入的類名稱後的空間中而被觸發。

相關問題