Default editor for files without file name extension in Mac OS X

11,218

Solution 1

You need to change the editor for the text/plain mime type or public.plain-text UTI. The regular Get Info dialog changes the association for the file name extension, which these files don't have.


Get RCDefaultApp and install it.

Open System Preferences » Default Apps » Apps. Select your desired default editor, and look for either of the above in the application's list of supported types.

alt text alt text alt text

Select the entry, and click Set as Default. You're done. Both opening from Finder and the command-line open will open your new default editor.


This also changes all .txt files and the like. I don't think this can be prevented, since OS X thinks both these and extension-less files are public.plain-text/text/plain.


To do this without RCDefaultApp, edit Edit ~/Library/Preferences/com.apple.LaunchServices.plist.

Add an entry under LSHandlers, containing the UTI (key LSHandlerContentType, e.g. public.plain-text) and application bundle identifier (LSHandlerRoleAll, e.g. com.macromates.textmate).

It looks like this in Property List Editor:

alt text alt text

Solution 2

You can also run plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist and add something like this:

<dict>
    <key>LSHandlerContentType</key>
    <string>public.plain-text</string>
    <key>LSHandlerRoleAll</key>
    <string>com.macromates.textmate</string>
</dict>
<dict>
    <key>LSHandlerContentType</key>
    <string>public.unix-executable</string>
    <key>LSHandlerRoleAll</key>
    <string>com.macromates.textmate</string>
</dict>

You can apply changes by restarting or by rebuilding the Launch Services database. Logging out and back in isn't enough.

Or add this to a duti configuration file:

com.macromates.textmate public.plain-text all
com.macromates.textmate public.unix-executable all

public.plain-text also includes files with a .txt or .text extension. I don't know any way to change the default application for files with arbitrary extensions.

public.unix-exexutable includes executable scripts without a filename extension. If you try to change the default application for them from Finder, there is an error like this:

The operation can’t be completed.

An unexpected error occurred (error code -50).

Solution 3

RCDefaultApp is sadly no longer available, but SwiftDefaultApps is a modern replacement. It does not list MIME types, but I found that changing public/data on the "Uniform Type Identifiers" pane did the trick for files without an extension.

Share:
11,218

Related videos on Youtube

jasonkuhrt
Author by

jasonkuhrt

Updated on September 17, 2022

Comments

  • jasonkuhrt
    jasonkuhrt over 1 year

    I want to open files without file name extension, including .dotsystemfiles (e.g. .htaccess or .vimrc) with a different editor than TextEdit. Doing the regular Change All... in the Get Info panel won't do the trick as it gives the following error:

    alt text

  • mmmmmm
    mmmmmm over 13 years
    Or choose the Mime types tab and choose what app text/plain is opened by (this allows Aquamacs.app to be used which does not have the Mime types shown in its list
  • jasonkuhrt
    jasonkuhrt over 13 years
    This worked for me. Thanks a lot Daniel. A couple things to add: I needed to log out of the OS and then back in. Also, curiously, .DS_STORE files still open in TextEdit by default, but all other .dotsystemfiles are now opening in my desired editor.
  • ma11hew28
    ma11hew28 over 13 years
    Is there a way to do this with defaults write instead of downloading third party software?
  • HikeMike
    HikeMike over 13 years
    @Matt See my edited post.
  • Orion751
    Orion751 over 12 years
    What's the difference between text/plain and public.plain-text? Is there any reason other then @Mark's example to choose one over the other?
  • HikeMike
    HikeMike over 12 years
    @Orion One is a MIME type, the other is a Uniform Type Identifier. Just a different format to describe other document formats. They're usually easily interchangeable, which is why my answer contains both, except in cases like Mark's.
  • Eric Hu
    Eric Hu almost 8 years
    To set MacVim as the default, use "org.vim.macvim" for "LSHandlerRoleAll".
  • Nanashi No Gombe
    Nanashi No Gombe over 4 years
    This does not work in macOS Mojave or higher. Can you please suggest what we do now? Thanks.
  • xdhmoore
    xdhmoore over 3 years
    duti is awesome! Thanks for posting this.
  • kjyv
    kjyv about 2 years
    Thanks for the suggestion - I've had no luck with public.data but could instead add public.plain-text to MacVim in the Applications tab