Получите имя файла без расширения файла в функции Vim.
Я хочу получить имя файла без расширения файла в Vim.
Я написал следующие функции в моем файле .vimrc
для компиляции и запуска программы Java.
:function! JAVA_RUN()
:!javac %^M
:endfunction
map <F3> :execute JAVA_RUN()<CR> :source $HOME/.vimrc<CR>
В стороне функция, как я могу получить имя файла с расширением.
Ответы
Ответ 1
:help expand()
должен дать вам ответ, см. expand().
Вы должны использовать модификатор r
для%, с %:r
вместо %
, чтобы получить имя файла без расширения.
Если вы хотите писать функции для сборки и выполнения файлов, вы также должны посмотреть документацию для shellescape
, чтобы для предотвращения проблем с пробелами в имени файла или пути.
Ответ 2
Я буквально просто прочитал аналогичный вопрос (в том, что кто-то еще пытался настроить vim для автоматического создания для них с помощью F-ключа) и написал ответ о том, как вы можете использовать силу команды vim :make
, даже не требуя писать Makefile. В вашем случае это менее напрямую связано с вопросом, но я думал, что упомянул об этом на случай, если вы заинтересованы.
Кроме того, кто-то, кажется, написал что-то на Vim Tips Wiki о том, как настроить команду vim :make
для конкретной работы с Java проекты, построенные с помощью ant. Я не работал с Java в то время как сам, но в вашем случае это может быть хорошим местом для начала.
Ответ 3
Если вы хотите удалить имя файла (кроме %
и т.д.), посмотрите 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
.
Ответ 4
Я пришел сюда, чтобы найти ответ на аналогичный вопрос. Я хотел иметь возможность извлечь текущее имя класса из редактируемого java файла. Я нашел очень аккуратный способ сделать это в vim с аббревиатурой:
ab xclass <C-R>=expand('%:t:r')<CR>
Поместите эту строку в свой .vimrc(или аналогичный), чтобы это работало. Аббревиатура будет автоматически запускаться, как только вы нажимаете пробел, и поэтому я обычно префикс их "x", чтобы избежать их случайного расширения.
Трюк здесь - это комбинация :t
и :r
в аргументе expand()
. %
- это "текущее имя файла", :t
выбирает только t ail пути (только последний компонент пути), а :r
выбирает только r oot ( "одно расширение удалено" ). (цитируемые части из официальной документации expand().)
Итак, когда вы создаете новый класс в файле /a/b/ClassIAmAboutToCreate.java
, вы должны ввести:
public class xclass {
Когда вы нажмете пробел после "xclass", аббревиатура будет расширена до public class ClassIAmAboutToCreate
, что именно то, что вам нужно.
Также обратите внимание, что сокращение может быть вызвано нажатием Ctrl + ], который позволяет избежать вставки пробела после имени класса.