How can I write all the scrollback in a tmux session to a file?

capture-panel can grab the current screen, but not the entire scrollback.

10 Answers 10


This depends on the value of history-limit that you have set in your .tmux.conf - the default is 2000; if you wish to capture more, you will need to explicitly set the number of lines.

To capture the entire scrollback, enter copy mode, select the entire scrollback, and yank it into the buffer, then paste it into your file.

How you accomplish this will depend on the mode-keys option you prefer, vi or emacs. man tmux has a helpful table describing the respective keys.

I have the following in my .tmux.conf to simplify this:

unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

The process for capturing the full scrollback is then:

PrefixEsc : to enter copy mode

v : to begin visual selection (assuming you are already at the bottom of the screen)

gg : to capture everything in the scrollback

y : to yank it into the buffer

Prefixc : open another tmux window

vim scrollback.txt

i : enter insert mode in vim

Prefixp : paste into file

There is also an answer here describing how to copy the buffer to a temporary file using xsel that might be useful.

  • 4
    This is problematic at best … pasting into insert mode in Vim has all kinds of problems, e.g. when you have automatic indentation enabled. I never got this to work to my satisfaction. – Konrad Rudolph Jan 21 '15 at 16:19
  • 21
    If you use :set paste in vim, vim will ignore adding automatic indentations or any insert-based keybindings. – tlunter Feb 4 '15 at 21:18
  • @tlunter nice tip! – jasonwryan Feb 4 '15 at 23:10
  • Can this be done with default key bindings? – daveloyall Nov 5 '15 at 17:00
  • @daveloyall Of course, just don't use the keybind options I included from my .tmux.conf... – jasonwryan Nov 5 '15 at 17:14

For those looking for a simple answer, just use prefix + :, then type in capture-pane -S -3000 + return (Replace 3000 with however many lines you'd like to save.) This copies those lines into a buffer.

Then, to save the buffer to a file, just use prefix + : again, and type in save-buffer filename.txt + return, replacing filename with whatever you'd like.

(By default prefix is ctrl + b.)

  • 24
    save-buffer filename.txt seems to save the file in /, not in pwd (current directory). Instead, I provided an absolute file path and it worked like a charm – MohamedEzz Dec 8 '16 at 9:54
  • 21
    and don't forget that MINUS in front of the <<amount-of-buffer-lines-you-want-to-save>> – Yordan Georgiev Dec 23 '16 at 12:46
  • 12
    This is the best answer here. Thank you so much. – Jesse Atkinson Apr 21 '17 at 21:22
  • 8
    Yes, you win. This should be the top answer. – wordsforthewise Jun 6 '17 at 19:39
  • 5
    +n>1 After logging in to upvote, it would appear this is at least the second time this answer has been helpful to me. XD – L0j1k Mar 28 '19 at 3:01

With tmux 1.5, the capture-pane command accepts -S and -E to specify the start and end lines of the capture; negative values can be used to specify lines from the history. Once you have the data in a buffer, you can save it with save-buffer.

Here is an example binding (suitable for .tmux.conf) that wraps it all up with a prompt for the filename:

bind-key P command-prompt -p 'save history to filename:' -I '~/tmux.history' 'capture-pane -S -32768 ; save-buffer %1 ; delete-buffer'

This captures (up to) 32768 lines of history plus the currently displayed lines. Starting with tmux 1.6, you can use numbers down to INT_MIN if your pane has a history that is deeper than 32Ki lines (usually up to 2Gi lines). Starting in tmux 2.0, you can use capture-pane -S - to mean “start at the beginning of history” (i.e. no large, hard-coded negative number).

Note: The number of lines in the saved file will not always be equal to the pane’s history limit plus its height.

When a pane’s history buffer is full, tmux discards the oldest 10% of the lines instead of discarding just one line. This means a pane’s effective history depth will sometimes be as low as 90% of its configured limit.

  • Thanks for the answer… But my version of tmux doesn't accept -S to capture-pane (it appears to be 1.3-2, although that's from dpkg, as I can't figure out how to get tmux to show me a version number…) – David Wolever Dec 12 '11 at 5:40
  • 1
    You probably are running tmux 1.3; you can probably use tmux server-info | head -1 to see your version. tmux -V works in tmux* 1.4 and later. – Chris Johnsen Dec 12 '11 at 8:03
  • 1
    This is by far one of the most useful tmux commands I have found. – kenny Jul 19 '12 at 19:03
  • 1
    And if you are already in your tmux window and don't want to restart just do a [PrefixKey] : to get to the tmux command line, and then paste the whole line, then you just do a [Prefix] P it is capital P and you are good to go. – Ali Dec 17 '13 at 21:43
  • 1
    Is it possible to have the file name of the tmux buffer file generated automatically rather than prompted for? So everything you run the shortcut it would save to another file, for example with the current time in the filename. – user779159 Sep 16 '17 at 12:44

If you want something you can run from the command line (instead of using your tmux prefix keys), try running:

tmux capture-pane -pS -1000000

If you run it and it seems to not do anything, that's because it's outputting exactly what was just on your screen, so it looks the same.

Of course, you can also pipe it into a file:

tmux capture-pane -pS -1000000 > file.out

See the tmux man page and search for capture-pane for more things you can do (like capture escape sequences in case you want to preserve color, or specify whether you want multiple visual lines to be joined when they don't contain a new line)

  • 1
    This is very helpful, especially since the accepted answer no longer works. – piojo Jan 16 '19 at 7:22
  • The -p argument outputs to stdout instead of a tmux buffer. – palswim Dec 1 '19 at 6:24
  • 1
    If you are aren't in a local console this won't work so what I've tried is the following: 1) add a horizontal pane below 2) in the local shell, tmux capture-pane -t {top} -pS -1000 > ~/tmp.out – Adverbly Jul 27 '20 at 13:57
  • On my tmux (2.6-3ubuntu0.2), you can use -S- to capture all the available history in the pain: tmux capture-pane -p -S- > /tmp/output.txt. First-hand source (I think): man7.org/linux/man-pages/man1/tmux.1.html#COMMANDS, "-S and -E specify the starting and ending line numbers [...] ‘-’ to -S is the start of the history" – Eric Cousineau Mar 14 at 19:21
  • Ah, also useful: Use -J so that wordwrapping in your buffer is removed when dumped to a file, caveat is training spaces, so sed can help. Full cmd: tmux capture-pane -p -J -S- | sed -E 's# +$##g' > /tmp/output.txt – Eric Cousineau Mar 24 at 21:42

I had standard key bindings which appeared to be a bit different than in @jasonwryan's answer and didn't change anything in config.

Below is recipe that worked for me. Maybe you will find it useful if you don't want to make any changes in tmux config and just want to quickly copy some of the scrollback.

Prefix == Ctrl+b in my tmux (tmux 1.6, debian 7).

  1. Enter select mode: Prefix + [.
  2. Start selection: Space.
  3. Highlight necessary text using vim navigation (for instance, use arrow keys or press gg to reach beginning of output history).
  4. Actually copy in internal clipboard using Enter. You will be exited from copy mode.
  5. Open any file using vim (probably on new tmux tab) and paste content you copied before using Prefix + ].
  6. Then you may do cat of that file or use output how you need.
  • man tmux helped me to sort out that my tmux was in emacs mode, so none of the key-bindings above worked. man tmux, again, helped me sort out what to use. But the biggest mistake that I made was that the host that I saved the contents from was not the host that I was running tmux from, so I kept looking for the saved file on the wrong host ... – Cognitiaclaeves Aug 4 '17 at 1:29

Here's a tmux plugin that enables this:


After you install it, save the entire scrollback with prefix + alt-shift-p.


This is actually very easy. Enter the command mode by press prefix key then :. Then do capture-pane -S -<line number you want to dump> Then save-buffer <filepath>

That file contains all the scrollback output. You should delete the buffer afterwards for safety reason.


How can I write all the scrollback in a tmux session to a file?

I use this in my ~/.tmux.conf, and now when I exit my running shell, pane output is saved to unique log file:

set -g remain-on-exit
set-hook pane-died 'capture-pane -S - -E - ; save-buffer "$HOME/logs/tmux/tmux-saved.#{host_short}-#{session_id}:#{window_id}:#{pane_id}-#{pane_pid}-#{client_activity}.log"; delete-buffer; kill-pane'                        

How can I write all the scrollback in a tmux session to a file?

From the manual: ‘-’ to -S is the start of the history.


tmux capture-pane -pS - > file

This will "write all the scrollback in a tmux" pane.

For all pane's in the session, you can try to loop through all the panes with tmux list-panes -s ...

If that's what you needed, I might update this answer.

  • 1
    This. Who the heck wants to futz with the scrollback line numbers? What a waste of time. So much easier to just dump everything and slice / dice the output file later with a sane UI in your favorite text editor/ gnu commands. – ijoseph Sep 13 '20 at 4:53

Dump to a file and automatically open the file in vim

This is sweet:

bind-key v 'capture-pane' \; \
  capture-pane -S - \; \
  save-buffer /tmp/tmux \; \
  delete-buffer \; \
  send-keys Escape 'ddivim /tmp/tmux' Enter

It supposes that your shell is in vi mode, so that:

  • Escape goes into normal mode
  • dd clears any existing command
  • i goes into insert mode
  • then we run vim /tmp/tmux

Tested in tmux 3.0.

  • 1
    +1 Wonderful answer, but writing the scrollback to a file in /tmp looks like a bad idea since others get the permission to read it! Additionally, in case one is going to use this just to navigate the scrollback with full Vim powers and don't actually want to keep it in a file polluting the filesystem, then one could immediately delete the file after Vim gets its contents in a buffer. E.g. this is what I do: bind v capture-pane -S - \; save-buffer ~/.x \; delete-buffer \; new-window 'vim "set buftype=nofile" +"!rm ~/.x" ~/.x +'. – Quasímodo Apr 29 at 20:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.