If your keybindings suddenly disappear, it may be because the device ID has changed and Elite can't find it anymore. If Elite can't find all of the devices used in a custom keybinding, it won't load that keybinding at all. This can happen if you move your controller to a different USB port, for example. Here is an easy way to fix it without rebinding everything.
TLDR: Find the missing ID in BindingLoadingErrors.log, then find the name of the missing device in Custom.4.0.binds and use find-and-replace to copy the device name over the missing ID.
- Go to C:Users[username]AppDataLocalFrontier DevelopmentsElite DangerousOptionsBindings
- Open BindingLoadingErrors.log and look for an error like this: "Failed to find GUID for device: 096FC39A." This is the ID for the device that Elite can't find. If you're getting different-looking errors, this guide probably won't help.
- Make a copy of the file Custom.4.0.binds (for Horizons 4.0 and Odyssey) or Custom.3.0.binds (for Horizons 3.0) and replace "Custom" with something else, for example: dudefaceguy.4.0.binds. This will preserve the old file, and will create a new custom binding entry in the "preconfigured bindings" menu. If your bindings aren't in this file, check one of the backup binding files, which look like "Custom.4.0.binds.149524057.backup" or use one of the backup copies that you made yourself in the past because you are so wise.
- Open the new .binds file you just created in your favorite text editor with a find-and-replace function. Search for the missing ID from BindingLoadingErrors.log, and figure out which device it is based on its bound functions.
- Now we need to find the missing device's name or new ID. Apparently, the .binds file can use either a device name or a numeric ID. In my case, the missing device was my Logitech Extreme 3D Pro flightstick, and the .binds file had an existing line in it that referred to it by name rather than ID: <Binding Device="LogitechExtreme3DPro" Key="Joy\_RZAxis" />. If you don't have something like this handy in the existing file, I suppose you could just start the game, bind a key with the missing device, and re-open the custom.4.0.binds file to find its new ID or name. It seems like using the device name instead of ID should prevent issues with changed IDs in the future, but I don't really know.
- Now we need to replace the old ID with the device name (or new ID). Open up your new .binds file (e.g. dudefaceguy.4.0.binds) and use find-and-replace (usually Ctrl+H). Just replace the old ID from BindingLoadingErrors.log with the device name or new ID.
- Start up Elite and go to control settings. You should see a new entry with your custom name (in this example, "dudefaceguy") in the list of predefined configurations in the drop-down menu in the upper-right. Select your bindings and all should be well. In Odyssey, you have to do this 4 times, once for each control sub-menu.
This worked for me, but I'm no expert and I don't know if it will solve every problem. But it seems like a lot of people are having this same issue so I hope it can help some of you.