如何根据文件类型,选择程序打开文件

Vim、Emacs配置和使用
回复
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

如何根据文件类型,选择程序打开文件

#1

帖子 sarrow » 2011-11-27 14:27

应用程序,注册了mime到gnome下面;这样nautilus就可以使用特定的程序,打开特定mime类型的文件。

用vim模拟这个的话应该怎么操作?

比如,在windows下面,使用RunDll32.exe shell32.dll,ShellExec_RunDLL {文件名},即可用默认的打开方式打开各种文件。

ubuntu下面,应该怎么操作?

能否利用系统已经注册好了的mime类型?还是得自己建立一个mime与程序间的数据库?
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 如何根据文件类型,选择程序打开文件

#2

帖子 fanhe » 2011-11-27 14:38

你想要 vim 模拟什么东西?

你到底想问什么?

vim 跟 nautilus 能比么? 一个编辑器一个是文件管理器

还是你指把 vim 当文件管理器的时候模拟 nautilus 的双击打开?

实在不知道你想问什么, lx 解答
头像
rykka
帖子: 59
注册时间: 2011-06-24 9:14

Re: 如何根据文件类型,选择程序打开文件

#3

帖子 rykka » 2011-11-27 14:53

代码: 全选

!gnome-open "%:p"
不过我现在在arch下的gvim里没反应。

windows下可用 start
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 如何根据文件类型,选择程序打开文件

#4

帖子 sarrow » 2011-11-27 17:37

fanhe 写了:你想要 vim 模拟什么东西?

你到底想问什么?

vim 跟 nautilus 能比么? 一个编辑器一个是文件管理器

还是你指把 vim 当文件管理器的时候模拟 nautilus 的双击打开?

实在不知道你想问什么, lx 解答
windows 下面,利用我提供的那个命令,可以在cmd下面打开任何,已经在系统里面注册过的类型的文件。

我想知道,ubuntu下面,有没有类似的通吃的指令?可以直接在gnome-terminal下面工作的指令?
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 如何根据文件类型,选择程序打开文件

#5

帖子 sarrow » 2011-11-27 17:38

en,多谢3楼的。可用。
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 如何根据文件类型,选择程序打开文件

#6

帖子 sarrow » 2011-11-27 17:40

rykka 写了:

代码: 全选

!gnome-open "%:p"
不过我现在在arch下的gvim里没反应。

windows下可用 start
你的在后面加一个&。表示另起炉灶。
头像
rykka
帖子: 59
注册时间: 2011-06-24 9:14

Re: 如何根据文件类型,选择程序打开文件

#7

帖子 rykka » 2011-11-27 18:33

这样啊,加 & 确实可用。

可在vim中不加也能运行啊
而以前我在ubuntu下的gvim也是不加的
:em23
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: 如何根据文件类型,选择程序打开文件

#8

帖子 Fermat618 » 2011-11-27 18:42

[bash]
man xdg-open
[/bash]
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 如何根据文件类型,选择程序打开文件

#9

帖子 sarrow » 2011-11-27 19:27

多谢8楼的好心人。

*unix下的工具太多了,没人指点,还真像无头苍蝇一样。
xvii
帖子: 54
注册时间: 2008-03-12 14:33

Re: 如何根据文件类型,选择程序打开文件

#10

帖子 xvii » 2011-11-27 23:44

在我的_vimrc里有这样一段:

代码: 全选

"" Open URL in browser {{{
function! Browser ()
	let line = getline (".")
	let line = matchstr (line, "http[^'   ]*")
	silent exec "!E:\\Software\\FirefoxPortable\\FirefoxPortable.exe ".line
endfunction
" }}}

"" Open Url on this line with the browser \w {{{
map <Leader>url :call Browser ()<CR>
" }}}
还有这样一段:

代码: 全选

"" Online Documentation {{{
function! OnlineDoc()
	" let s:browser = "swiftfox"
	let s:browser = "E:\\Software\\FirefoxPortable\\FirefoxPortable.exe"
	let s:wordUnderCursor = expand("<cword>")
	if &ft == "cpp" || &ft == "c"
		let s:url = "http://www.google.com/codesearch?q=".s:wordUnderCursor."+lang:".&ft
	elseif &ft == "vim"
		let s:url = "http://www.google.com/codesearch?q=".s:wordUnderCursor
	else
		return
	endif
	let s:cmd = "silent !" . s:browser . " " . s:url  "&"
	execute  s:cmd
	redraw!
endfunction
" let maplocalleader=',' " all my macros start with
" online doc search
" map <LocalLeader>k :call OnlineDoc()<CR>
map <leader>k :call OnlineDoc()<CR>
" }}}
操作系统:Linux erocpil 2.6.38-gentoo-r6 #2 SMP Sun Sep 11 10:15:16 GMT 2011 x86_64 Intel(R) Core(TM)2 CPU T5200 @ 1.60GHz GenuineIntel GNU/Linux
编程语言:C/C++,Perl。
谷歌代码:manshow-重新编译的win32版本Vim,加入诸多特性:非等宽中文字体(如微软雅黑),脚本语言接口(如Perl,Python,Lua),透明效果等。
个人主页:http://lyx.us.tc/
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

Re: 如何根据文件类型,选择程序打开文件

#11

帖子 sarrow » 2011-11-28 0:47

多谢10楼的朋友,我根据你的脚本,把两个函数做了一个合并——这样,只用记住一个快捷键。

其中,至于真正的工作函数:
system#WinExp_{MySys()}(url)
按系统的不同(windows和linux),分为两个实例(system#WinExp_linux/system#WinExp_windows),分别呼叫合适的程序。

代码: 全选

" Sarrow: 2011-11-28
nnoremap <leader>www :call system#OnlineDoc()<CR>

" Sarrow: 2011-11-28
" inspired by
" http://forum.ubuntu.org.cn/viewtopic.php?f=68&t=355303
function! system#OnlineDoc() " open Online Documentation or search in google
   let wordUnderCursor = expand("<cword>")
   if wordUnderCursor =~ '\<https\?\>'
       let url = matchstr (getline("."), 'https\?[^''"\s]*')
   else
       if &ft == "cpp" || &ft == "c"
	   let url = "http://www.google.com/codesearch?q=" . wordUnderCursor . "+lang:" . &ft
       elseif &ft == "vim"
	   let url = "http://www.google.com/codesearch?q=" . wordUnderCursor
       else
	   let url = 'http://www.google.com/search?q=' . wordUnderCursor . '&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest'
       endif
   endif
   call system#WinExp_{MySys()}(url)
endfunction
" End: 2011-11-28
回复